ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

力扣 - 剑指 Offer 25. 合并两个排序的链表

2021-11-19 02:31:46  阅读:111  来源: 互联网

标签:25 ListNode temp Offer next 链表 l2 l1


题目

剑指 Offer 25. 合并两个排序的链表

思路1

  • 其实就是归并排序中将两个数组合并成一个有序数组
  • 因为两个链表的元素已经是递增了(必要条件),所以我们可以遍历两个链表,判断两个节点的大小关系,然后交替前进,合并到一个新的链表中
  • 因为需要返回一个合并后的新链表,同时我们也无法判断l1l2两个链表的值大小,因此我们可以创建一个虚拟头节点dummy,相当于用来标识这个链表,这样最后的结果就是虚拟头节点的下一个节点dummy.next

代码

class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        // 创建一个虚拟头节点
        ListNode dummy = new ListNode(-1);
        ListNode temp = dummy;

        // 就是归并排序里的将两个数组合并成一个有序数组
        // 要保证这两个链表都是有效的,及不为空
        // 如何判断大小进行合并,注意这里要重新创建节点
        while (l1 != null && l2 != null) {
            if (l1.val < l2.val) {
                temp.next = new ListNode(l1.val);
                temp = temp.next;
                l1 = l1.next;
            } else {
                temp.next = new ListNode(l2.val);
                temp = temp.next;
                l2 = l2.next;
            }
        }
        // 判断两个链表是否都遍历完
        while (l1 != null) {
            temp.next = new ListNode(l1.val);
            temp = temp.next;
            l1 = l1.next;
        }
        while (l2 != null) {
            temp.next = new ListNode(l2.val);
            temp = temp.next;
            l2 = l2.next;
        }

        // 答案就是虚拟头节点的next下一个节点
        return dummy.next;
    }
}

复杂度分析

  • 时间复杂度:\(O(M+N)\),M、N分别为l1l2两个链表的长度
  • 空间复杂度:\(O(1)\)

标签:25,ListNode,temp,Offer,next,链表,l2,l1
来源: https://www.cnblogs.com/linzeliang1222/p/15575279.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有