📌  相关文章
📜  用于合并排序链接列表的 Javascript 程序(1)

📅  最后修改于: 2023-12-03 15:11:16.068000             🧑  作者: Mango

用于合并排序链接列表的 Javascript 程序

简介

本文将介绍一个用于合并排序链接列表的 Javascript 程序。该程序可以有效地将两个有序链表合并成一个有序链表。它使用了迭代和递归两种方法实现,可以应用于各种类型的排序链接列表,包括单向链表和双向链表。

迭代方法
实现思路

迭代方法的实现思路非常简单。我们从两个链表的头部开始比较它们的值,将较小的节点添加到新的链表中,并将指针移动到被添加的节点的下一个节点。重复这个过程,直到有一个链表的节点全部添加到了新链表中。然后,将另一个链表的剩余节点添加到新链表的末尾。

代码实现
function mergeListsIteratively(l1, l2) {
  let dummyHead = new ListNode(0); // 创建一个虚拟头节点
  let current = dummyHead; // current 用来链接新链表

  while (l1 && l2) {
    if (l1.val < l2.val) {
      current.next = l1;
      l1 = l1.next;
    } else {
      current.next = l2;
      l2 = l2.next;
    }
    current = current.next;
  }

  current.next = l1 || l2; // 将剩余节点添加到新链表的末尾

  return dummyHead.next; // 返回新链表的头节点
}
递归方法
实现思路

递归方法比迭代方法稍微复杂一些。我们定义一个 merge 函数,它接受两个链表作为参数,并返回合并后的有序链表。比较两个链表的头节点的值,选取较小的节点作为新链表的头节点,并递归调用 merge 函数,将较小节点的 next 指针指向下一个节点的合并结果。最后,将合并后的链表返回。

代码实现
function mergeListsRecursively(l1, l2) {
  if (!l1) return l2;
  if (!l2) return l1;

  if (l1.val < l2.val) {
    l1.next = mergeListsRecursively(l1.next, l2);
    return l1;
  } else {
    l2.next = mergeListsRecursively(l1, l2.next);
    return l2;
  }
}
总结

本文简单介绍了两种用于合并排序链接列表的 Javascript 程序。通过迭代和递归两种方法的实现,我们可以很容易地将两个有序链表合并成一个有序链表。在实际开发中,我们可以根据实际情况选择不同的方法进行实现。