TL;DR
把一个链表连接到另一个链表的末尾。系列目录见 前言和目录 。
需求
实现一个 append()
函数,把两个链表连接起来,并返回连接后的链表头结点。
var listA = 1 -> 2 -> 3 -> null
var listB = 4 -> 5 -> 6 -> null
append(listA, listB) === 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> null
如果两个链表都是 null
就返回 null
,如果其中一个是 null
就返回另一个链表。
递归版本
append
本身就可以作为递归的逻辑。append(listA, listB)
实际上等于 listA.next = append(listA.next, listB)
,直到 listA
递归到末尾 null
,这时 append(null, listB)
直接返回 listB
即可。加上边界条件判断,代码如下:
function append(listA, listB) {
if (!listA) return listB
if (!listB) return listA
listA.next = append(listA.next, listB)
return listA
}
循环版本
循环的思路是,在 listA
和 listB
都不为空的情况下,先找到 listA
的尾节点,假设为 node
,然后 node.next = listB
即可。代码如下:
function appendV2(listA, listB) {
if (!listA) return listB
if (!listB) return listA
let node = listA
while (node.next) node = node.next
node.next = listB
return listA
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。