用 JavaScript 實現鏈表操做 - 09 Move Node

TL;DR

把一個鏈表的首節點移到另外一個鏈表。系列目錄見 前言和目錄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 的簡化版,你能夠重用 第一個 katapush 方法。node

關於 Context

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

參考資料

Codewars Kata
GitHub 的代碼實現
GitHub 的測試函數

相關文章
相關標籤/搜索