此题解采用了双指针的方法来合并两个有序链表。通过设置一个虚拟头节点(dummy),利用一个指针(cur)迭代地选择两个链表中较小的节点加入到新链表中。当一个链表的节点被全部选完后,直接将另一个链表的剩余部分连接到新链表的末尾。这样,新链表最终将包含两个原链表的所有节点,且节点顺序为升序。
时间复杂度: O(n + m)
空间复杂度: O(1)
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
dummy = ListNode(0) # 创建一个虚拟头节点
cur = dummy # 初始化当前节点为虚拟头节点
while l1 and l2: # 当两个链表均非空时进行循环
if l1.val > l2.val: # 比较两个链表头部的值
cur.next = l2 # 将较小值的节点接到新链表
l2 = l2.next # 移动较小值链表的指针
else:
cur.next = l1
l1 = l1.next
cur = cur.next # 移动新链表的指针
cur.next = l1 if l1 else l2 # 将未结束的链表接到新链表的末尾
return dummy.next # 返回虚拟头节点的下一个节点,即新链表的头节点