把一个链表的首节点移到另外一个链表。系列目录见 前言和目录 。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