📅  最后修改于: 2023-12-03 15:11:16.068000             🧑  作者: Mango
本文将介绍一个用于合并排序链接列表的 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 程序。通过迭代和递归两种方法的实现,我们可以很容易地将两个有序链表合并成一个有序链表。在实际开发中,我们可以根据实际情况选择不同的方法进行实现。