TL;DR
把一个链表的首节点移到另一个链表。系列目次见 前言和目次 。
需求
完成一个 moveNode()
函数,把源链表的头节点移到目的链表。当源链表为空时函数应抛出异常。为了简化起见,我们会用一个 Context
对象来存储转变后的源链表和目的链表的援用。它也是函数的返回值。
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
要领。
关于 Context
Context
的定义长这个模样,source
代表源链表,dest
代表目的链表。
function Context(source, dest) {
this.source = source
this.dest = dest
}
解法
合营 push
,这个 kata 异常简朴,注重这个函数没有转变两个链表自身。代码以下:
function moveNode(source, dest) {
if (!source) throw new Error('source is empty')
return new Context(source.next, push(dest, source.data))
}
总结
这个 kata 自身很简朴,就没有分递归和轮回的版本了,其存在意义重要是为了下一个 kata 做铺垫。
算法相干的代码和测试我都放在 GitHub 上,假如对你有协助请帮我点个赞!