herionliu 2019-06-21
把一个链表连接到另一个链表的末尾。系列目录见 前言和目录 。
实现一个 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 }