成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

用 JavaScript 實(shí)現(xiàn)鏈表操作 - 09 Move Node

suosuopuo / 2244人閱讀

摘要:需求實(shí)現(xiàn)一個(gè)函數(shù),把源鏈表的頭節(jié)點(diǎn)移到目標(biāo)鏈表。當(dāng)源鏈表為空時(shí)函數(shù)應(yīng)拋出異常。為了簡化起見,我們會(huì)用一個(gè)對(duì)象來存儲(chǔ)改變后的源鏈表和目標(biāo)鏈表的引用。它也是函數(shù)的返回值。解法配合,這個(gè)非常簡單,注意這個(gè)函數(shù)沒有改變兩個(gè)鏈表本身。

TL;DR

把一個(gè)鏈表的首節(jié)點(diǎn)移到另一個(gè)鏈表。系列目錄見 前言和目錄 。

需求

實(shí)現(xiàn)一個(gè) moveNode() 函數(shù),把源鏈表的頭節(jié)點(diǎn)移到目標(biāo)鏈表。當(dāng)源鏈表為空時(shí)函數(shù)應(yīng)拋出異常。為了簡化起見,我們會(huì)用一個(gè) Context 對(duì)象來存儲(chǔ)改變后的源鏈表和目標(biāo)鏈表的引用。它也是函數(shù)的返回值。

var source = 1 -> 2 -> 3 -> null
var dest = 4 -> 5 -> 6 -> null
moveNode(source, dest).source === 2 -> 3 -> null
moveNode(source, dest).dest === 1 -> 4 -> 5 -> 6 -> null

這個(gè) kata 是下一個(gè) kata 的簡化版,你可以重用 第一個(gè) kata 的 push 方法。

關(guān)于 Context

Context 的定義長這個(gè)樣子,source 代表源鏈表,dest 代表目標(biāo)鏈表。

function Context(source, dest) {
  this.source = source
  this.dest = dest
}
解法

配合 push ,這個(gè) kata 非常簡單,注意這個(gè)函數(shù)沒有改變兩個(gè)鏈表本身。代碼如下:

function moveNode(source, dest) {
  if (!source) throw new Error("source is empty")
  return new Context(source.next, push(dest, source.data))
}
總結(jié)

這個(gè) kata 本身很簡單,就沒有分遞歸和循環(huán)的版本了,其存在意義主要是為了下一個(gè) kata 做鋪墊。

算法相關(guān)的代碼和測(cè)試我都放在 GitHub 上,如果對(duì)你有幫助請(qǐng)幫我點(diǎn)個(gè)贊!

參考資料

Codewars Kata
GitHub 的代碼實(shí)現(xiàn)
GitHub 的測(cè)試

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/81130.html

相關(guān)文章

  • JavaScript 實(shí)現(xiàn)鏈表操作 - 10 Move Node In-place

    摘要:需求實(shí)現(xiàn)一個(gè)函數(shù),把源鏈表的頭結(jié)點(diǎn)移到目標(biāo)鏈表的開頭。要求是不能修改兩個(gè)鏈表的引用。跟前一個(gè)不同的是,這個(gè)是在不改變引用的情況下修改兩個(gè)鏈表自身。最優(yōu)的方案這個(gè)算法考的是對(duì)鏈表節(jié)點(diǎn)的插入和刪除。大致思路為對(duì)做刪除一個(gè)節(jié)點(diǎn)的操作。 TL;DR 用 in-place 的方式把一個(gè)鏈表的首節(jié)點(diǎn)移到另一個(gè)鏈表(不改變鏈表的引用),系列目錄見 前言和目錄 。 需求 實(shí)現(xiàn)一個(gè) moveNode()...

    CNZPH 評(píng)論0 收藏0
  • JavaScript 實(shí)現(xiàn)鏈表操作 - 前言和目錄

    摘要:我打算寫一個(gè)鏈表操作的系列,來自的系列,實(shí)現(xiàn)語言是。通過自己實(shí)現(xiàn)一個(gè)鏈表和常用操作,可以加深理解這類數(shù)據(jù)結(jié)構(gòu)的優(yōu)缺點(diǎn)。鏈表經(jīng)常用來訓(xùn)練指針操作,雖然這只對(duì)適用,但等高級(jí)語言中控制引用的思路其實(shí)也差不多。 TL;DR 我打算寫一個(gè)鏈表操作的系列,來自 Codewars 的 Linked List 系列 kata ,實(shí)現(xiàn)語言是 JavaScript 。這篇是開篇,簡單描述了一下我寫這個(gè)的目...

    BetaRabbit 評(píng)論0 收藏0
  • JavaScript 實(shí)現(xiàn)鏈表

    摘要:相反,雙向鏈表具有指向其前后元素的節(jié)點(diǎn)。另外,可以對(duì)鏈表進(jìn)行排序。這個(gè)實(shí)用程序方法用于打印鏈表中的節(jié)點(diǎn),僅用于調(diào)試目的。第行將更新為,這是從鏈表中彈出最后一個(gè)元素的行為。如果鏈表為空,則返回。 showImg(https://segmentfault.com/img/bVbsaI7?w=1600&h=228); 什么是鏈表 單鏈表是表示一系列節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu),其中每個(gè)節(jié)點(diǎn)指向鏈表中的下一...

    appetizerio 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<