将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
根据题目的描述可知,给定的两个链表本身就是递增有序的。因此,为了得到合并后依然有序的新链表,我们可以新建一个结点 n e w H e a d newHead newHead作为新链表的头结点,然后设置两个指针 p p p和 q q q分别指向两个链表的开始位置,然后比较 p p p和 q q q所指向结点值的大小:
-
如果 p . v a l < q . v a l p.val < q.val p.val<q.val,将 p p p作为 n e w H e a d newHead newHead的 n e x t next next,然后 p p p后移
-
如果 q . v a l < p . v a l q.val < p.val q.val<p.val,将 q q q作为 n e w H e a d newHead newHead的 n e x t next next,然后 q q q后移
-
直到一个链表遍历到头,将另一个链表剩下的元素接到新链表后即可
AC code
# 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:
if l1 is None:
return l2
if l2 is None:
return l1
newHead = ListNode(-1)
cur = newHead
while l1 and l2:
if l1.val >= l2.val:
cur.next = l2
l2 = l2.next
else:
cur.next = l1
l1 = l1.next
# 当cur.next不为None时需要同时移动cur指针
cur = cur.next
if l1:
cur.next = l1
return newHead.next
if l2:
cur.next = l2
return newHead.next