把一個鏈表的首節點移到另外一個鏈表。系列目錄見 前言和目錄 。javascript
實現一個 moveNode()
函數,把源鏈表的頭節點移到目標鏈表。當源鏈表爲空時函數應拋出異常。爲了簡化起見,咱們會用一個 Context
對象來存儲改變後的源鏈表和目標鏈表的引用。它也是函數的返回值。java
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
這個 kata 是下一個 kata 的簡化版,你能夠重用 第一個 kata 的 push
方法。node
Context
的定義長這個樣子,source
表明源鏈表,dest
表明目標鏈表。git
function Context(source, dest) { this.source = source this.dest = dest }
配合 push
,這個 kata 很是簡單,注意這個函數沒有改變兩個鏈表自己。代碼以下:github
function moveNode(source, dest) { if (!source) throw new Error('source is empty') return new Context(source.next, push(dest, source.data)) }
這個 kata 自己很簡單,就沒有分遞歸和循環的版本了,其存在乎義主要是爲了下一個 kata 作鋪墊。算法
算法相關的代碼和測試我都放在 GitHub 上,若是對你有幫助請幫我點個贊!segmentfault