题目描述:
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
示例1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
限制:0 <= 链表长度 <= 1000
根据题目的描述可知,给定的两个链表本身就是递增有序的。因此,为了得到合并后依然有序的新链表,我们可以新建一个结点 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后移
-
直到一个链表遍历到头,将另一个链表剩下的元素接到新链表后即可
# 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:
l = ListNode(-1)
cur = l
p, q = l1, l2
while p and q:
if p.val >= q.val:
cur.next = q
q = q.next
else:
cur.next = p
p = p.next
cur = cur.next
if p: cur.next = p
if q: cur.next = q
return l.next