有序链表合并与分治
一、面试常考点
1. 两两合并
使用 dummy + tail 指针构建新链表。
2. K 路合并
分治合并或最小堆。
二、细节介绍
1. 两链表合并
每次取较小节点接到尾部。
2. K 链表合并
分治复杂度可到 O(N log k)。
三、示例代码
function mergeTwoLists(l1, l2) {
const dummy = { next: null }
let tail = dummy
while (l1 && l2) {
if (l1.val <= l2.val) {
tail.next = l1
l1 = l1.next
} else {
tail.next = l2
l2 = l2.next
}
tail = tail.next
}
tail.next = l1 || l2
return dummy.next
}
四、常用应用场景
1. 多路数据流归并
日志流、增量数据归并。
2. 外排序子过程
归并排序中的链表版本。