迭代法是最直观、空间效率最高的方法。它的核心思想是创建一个新的链表,然后同时遍历 list1 和 list2,逐个比较节点的值,将较小的节点依次链接到新链表的末尾。

迭代法 (Iteration)
迭代法是最直观、空间效率最高的方法。它的核心思想是创建一个新的链表,然后同时遍历 list1 和 list2,逐个比较节点的值,将较小的节点依次链接到新链表的末尾。
关键技巧:哨兵节点 (Sentinel Node)
为了简化在空链表上添加第一个节点的操作,我们通常会创建一个“哨兵节点”(也叫虚拟头节点 dummy)。它不存储任何有效数据,只是作为新链表的临时头部。我们同时用一个 tail 指针来追踪新链表的最后一个节点,方便我们进行添加操作。
算法步骤:
初始化:
创建一个哨兵节点
dummy = ListNode()。创建一个指针
tail = dummy,tail将永远指向新链表的尾部。
主循环:当
list1和list2都不为空时,进行循环:比较
list1.val和list2.val的大小。如果
list1.val更小,就将list1的当前节点链接到tail.next,然后将list1指针后移一位。否则,将
list2的当前节点链接到tail.next,然后将list2指针后移一位。无论链接了哪个节点,都必须将
tail指针后移一位 (tail = tail.next),以确保它始终指向新链表的末尾。
处理剩余部分:循环结束后,
list1和list2最多只有一个还不为空。我们直接将这个非空的链表剩余的所有部分链接到tail.next即可。返回结果:合并后的新链表的真正头节点是哨兵节点的下一个节点,即
dummy.next。
1 | # Definition for singly-linked list. |