描述:给定两个按非递减顺序排列的链表,合并两个链表,并将结果按非递减顺序排列。
例如:
cpp
# 链表 1: 1 -> 2 -> 4
# 链表 2: 1 -> 3 -> 4
合并后的链表应该是:1 -> 1 -> 2 -> 3 -> 4 -> 4
要求:
实现一个函数 merge_two_lists(l1, l2),其中 l1 和 l2 分别为两个有序链表的头结点。
函数应该返回合并后的有序链表的头结点。
实现:
cpp
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def merge_two_lists(l1, l2):
# 创建一个虚拟头结点,方便操作
dummy = ListNode()
current = dummy
# 遍历两个链表
while l1 and l2:
# 比较当前两个节点的值,将较小的节点连接到新链表中
if l1.val < l2.val:
current.next = l1
l1 = l1.next
else:
current.next = l2
l2 = l2.next
current = current.next
# 处理剩余的节点
if l1:
current.next = l1
elif l2:
current.next = l2
# 返回合并后的链表头结点
return dummy.next
# 测试
l1 = ListNode(1, ListNode(2, ListNode(4)))
l2 = ListNode(1, ListNode(3, ListNode(4)))
result = merge_two_lists(l1, l2)
# 打印合并后的链表值
while result:
print(result.val, end=" -> ")
result = result.next
# 输出:1 -> 1 -> 2 -> 3 -> 4 -> 4
这个算法使用了双指针,遍历两个有序链表,比较当前节点的值,将较小的节点连接到新链表中。最后处理剩余的节点,并返回合并后的链表头结点。