剑指offer 25 - 合并两个排序的链表 - python

57 阅读1分钟

题目描述:

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

示例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