用 JavaScript 完成链表操纵 - 07 Append

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
}

轮回版本

轮回的思绪是,在 listAlistB 都不为空的情况下,先找到 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
}

参考资料

Codewars Kata
GitHub 的代码完成
GitHub 的测试

    原文作者:darkbaby123
    原文地址: https://segmentfault.com/a/1190000008047926
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞