21. 合并两个有序链表

题干(5月1日每日一题)

21. 合并两个有序链表

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

示例:

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

思路

比较基础的链表操作练习,两种思路。

  1. 新建立一个链表,把l1,l2中较小的一个链接到新链表的后面
  2. 固定l1, 把l2 的结点插入l1 中

考虑到这道题比较基础,所以将新手操作链表需要注意的点写一下,理解透了这两点,链表操作不是问题。

  1. 假设有链表x->y, 也就是x.next = y
    当你对x.next进行赋值时,其修改的并不是y,而是xnext指针,这样做并不会对y结点产生任何影响,它只是对x结点的后继结点进行更换

    这也是很多新手操作链表存在的误区

  2. 每个结点只有一个next,也就是说一旦一个结点的next被修改,其改动之前的next如果不做记录便会断掉

  • python 代码1, 对应思路1
class Solution:
    def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
        p1, p2 = l1, l2
        head = ListNode(None)
        p = head
        while p1 and p2:
            if p1.val < p2.val:
                p.next = p1
                p1 = p1.next
                p = p.next
            else:
                p.next = p2
                p2 = p2.next
                p = p.next
        if p1:
            p.next = p1
        if p2:
            p.next = p2
        return head.next
  • python 代码2,对应思路2
class Solution:
    def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
        head = ListNode(None)
        head.next = l1
        pre, p2 = head, l2
        while pre.next and p2:
            if p2.val < pre.next.val:
                temp = p2
                p2 = p2.next
                temp.next = pre.next
                pre.next = temp
            pre = pre.next
        if p2:
            pre.next = p2
        return head.next

如果感到有帮助的话,欢迎关注我的知乎,CSDN博客,简书哦,里面有更多的刷题笔记以及新奇思路,等你来踩!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。