LeetCode刷题笔记:合并两个有序链表(Python)

将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

方法一:双指针遍历

数据结构经典的单链表题,对我来说难点在于怎么用python实现指针的操作。
经过搜索后发现其实特别简单...(或者说并不需要严格意义上的指针)

思路:两个链表已经按元素值递增次序排序,将其合并时,均从第一个结点起进行比较,将小的结点链入链表中,同时后移工作指针。该问题既然要求返回一个升序链表,那么用尾插法即可。比较结束后,可能有一个链表会为空,此时用尾插法将剩下的结点依次插入新链表中。

需要注意的是:本体的单链表并没有头结点,所以不能直接将l1或l2置空,需要新建一个单链表用来保存结果。(希望大神可以赐教不用新建表的解法)

# 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:
        
        l3 = ListNode(-1)
        r = l3

        pa = l1
        pb = l2

        while pa and pb:
            
            if pa.val <= pb.val:
                r.next = pa
                pa = pa.next
            else:
                r.next = pb
                pb = pb.next

            r = r.next
        
        if pa:
            r.next = pa

        if pb:
            r.next = pb

        return l3.next
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容