📅  最后修改于: 2023-12-03 14:58:28.009000             🧑  作者: Mango
本题考察对数据结构的理解和编程实现能力。
给定两个升序排列的有序链表L1和L2,请设计一个非递归算法将它们合并为一个有序链表L。可以用常数空间。要求算法时间复杂度为$O(max(len(L1), len(L2)))$。
链表L1和L2。
合并后的有序链表L。
链表L1:
1 → 3 → 5
链表L2:
2 → 4 → 6 → 8
合并后的有序链表L:
1 → 2 → 3 → 4 → 5 → 6 → 8
该算法可以使用双指针法,分别指向L1和L2的头节点,比较两节点值大小,将小值节点接到合并后的链表L尾部。
算法流程:
以下为Python实现代码:
class Node:
def __init__(self, val=None, next=None):
self.val = val
self.next = next
def merge_sorted_lists(l1: Node, l2: Node) -> Node:
dummy = Node()
p1, p2, p3 = l1, l2, dummy
while p1 and p2:
if p1.val < p2.val:
p3.next = p1
p1 = p1.next
else:
p3.next = p2
p2 = p2.next
p3 = p3.next
p3.next = p1 if p1 else p2
return dummy.next
该算法利用常数空间实现了两个有序链表的合并操作,并且时间复杂度为$O(max(len(L1), len(L2)))$。此外,该算法还可以用递归实现。对于大数据量的情况,建议使用迭代实现。