Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >LeetCode97|合并两个有序链表

LeetCode97|合并两个有序链表

作者头像
码农王同学
发布于 2020-10-14 02:40:43
发布于 2020-10-14 02:40:43
34000
代码可运行
举报
文章被收录于专栏:后端Coder后端Coder
运行总次数:0
代码可运行

1,合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。

新链表是通过拼接给定的两个链表的所有节点组成的。

2,示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
示例:

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

3,题解思路

哨兵节点的使用

4,题解程序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class MergeTwoListsTest {
    public static void main(String[] args) {
        ListNode l11 = new ListNode(1);
        ListNode l12 = new ListNode(2);
        ListNode l13 = new ListNode(4);
        l11.next = l12;
        l12.next = l13;

        ListNode l21 = new ListNode(1);
        ListNode l22 = new ListNode(3);
        ListNode l23 = new ListNode(4);
        l21.next = l22;
        l22.next = l23;
        ListNode listNode = mergeTwoLists2(l11, l21);
        System.out.println("listNode = " + listNode);


    }

    public static ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if (l1 == null) {
            return l2;
        }
        if (l2 == null) {
            return l1;
        }
        ListNode dummyNode = new ListNode(-1);
        ListNode temp = dummyNode;
        while (l1 != null && l2 != null) {
            if (l1.val <= l2.val) {
                temp.next = l1;
                l1 = l1.next;
            } else {
                temp.next = l2;
                l2 = l2.next;
            }
            temp = temp.next;
        }
        temp.next = l1 == null ? l2 : l1;
        return dummyNode.next;
    }

    public static ListNode mergeTwoLists2(ListNode l1, ListNode l2) {
        if (l1 == null) {
            return l2;
        }
        if (l2 == null) {
            return l1;
        }
        List<Integer> list = new ArrayList<>();
        while (l1 != null) {
            list.add(l1.val);
            l1 = l1.next;
        }
        while (l2 != null) {
            list.add(l2.val);
            l2 = l2.next;
        }
        ListNode dummyNode = new ListNode(-1);
        ListNode tempNode = dummyNode;

        Collections.sort(list);
        for (Integer num : list
        ) {
            tempNode.next = new ListNode(num);
            tempNode = tempNode.next;
        }

        return dummyNode.next;
    }
}

5,题解程序图片版

6,总结

这道题理解起来还是比较容易的对吧,两两比较,然后将较小的数据挂载dummyNode节点后面,这就是使用哨兵节点的好处,一般链表都或多或少的增加一个哨兵节点来处理数据。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农王同学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
​LeetCode刷题实战21:合并两个有序链表
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/01/19
2790
图解LeetCode——剑指 Offer 25. 合并两个排序的链表
针对上面的麻烦点,我们可以通过各种的if判断来进行处理,但是,还是有一个比较巧妙的方法,就是创建一个空值的节点作为结果链表的首节点,即:ListNode result = new ListNode();,那么我们后续对比两个链表时,都是向result节点后面进行链表的拼装,最终返回结果的时候只需要返回result.next即可。下图是具体的处理过程,因为逻辑处理比较简单,所以仅抽取了两次操作进行了图解,并没有把所有操作都画出来。
爪哇缪斯
2023/05/10
1960
图解LeetCode——剑指 Offer 25. 合并两个排序的链表
LeetCode18|排序链表
1,问题简述 在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。 2,示例 输入: 4->2->1->3 输出: 1->2->3->4 3,题解思路 本题基于哨兵节点加上集合排序操作 import java.util.ArrayList; import java.util.Collections; import java.util.List; public class SortListTest { public static void main(String[] arg
码农王同学
2020/08/12
3130
LeetCode18|排序链表
LeetCode17|删除链表的节点
1,问题简述 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。 返回删除后的链表的头节点。 注意:此题对比原题有改动 2,示例 输入: head = [4,5,1,9], val = 5 输出: [4,1,9] 解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9. 3,题解思路 使用哨兵节点和HashSet集合进行操作。 4,题解程序 import java.util.HashSet; import java.util.Linke
码农王同学
2020/08/12
4550
LeetCode17|删除链表的节点
LeetCode77|排序链表
有的时候自己写完整道题之后,确实不知道给你们说什么了,我觉得目前我输出的内容都是常规思路题,所以你懂吧,看懂代码的可以自己单独写写就可以了,具体的解题思路真的不知道怎么描述了。
码农王同学
2020/10/14
2890
LeetCode - 合并两个有序链表
原题地址:https://leetcode-cn.com/problems/merge-two-sorted-lists/
晓痴
2019/08/16
4130
LeetCode - 合并两个有序链表
《剑指offer》第21天:合并两个有序链表
首先我们拿到题目乍眼一看,类似这种链表的合并问题。基本上马上可以想到需要设置一个哨兵节点,这可以在最后让我们比较容易地返回合并后的链表。(不懂哨兵节点的同学,可以先移驾到 06.删除链表倒数第N个节点(19) 进行学习)
程序员小浩
2020/09/04
2690
leecode刷题(23)-- 合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
希希里之海
2019/05/14
4290
LeetCode122|删除排序链表中的重复元素II
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
码农王同学
2020/10/27
3320
LeetCode155|移除链表元素
一个是基于哨兵节点的方式进行解决,另一个是基于java集合的方式来做,本质上还是一样的
码农王同学
2021/01/15
2920
每天一道leetcode21-合并两个有序链表
https://leetcode-cn.com/problems/merge-two-sorted-lists/
乔戈里
2019/09/17
3810
LeetCode每日一题-4:合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
墨明棋妙27
2022/09/23
2410
剑指Offer LeetCode 面试题25. 合并两个排序的链表
输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 限制:
手撕代码八百里
2020/07/28
3160
21 合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
木瓜煲鸡脚
2021/01/18
3310
21 合并两个有序链表
LeetCode题解—两个有序链表合并
关于空间复杂度,有可能有的朋友会觉得用到了m+n长度的链表?所以空间复杂度也是O(m+n)?
码上积木
2021/02/08
2.2K0
LeetCode题解—两个有序链表合并
21. 合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
张伦聪zhangluncong
2022/10/26
1880
LinkedList - 21. Merge Two Sorted Lists
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
ppxai
2020/09/23
3440
LeetCode-21-合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
benym
2022/07/14
1770
【算法题解】 Day27 链表
我们可以如下递归地定义两个链表里的 merge 操作(忽略边界情况,比如空链表等):
sidiot
2023/08/31
1940
【算法题解】 Day27 链表
链表-合并两个有序链表,O(1)空间复杂度可否?
问题 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 解法一 看到这
阿伟
2019/07/30
2.7K0
相关推荐
​LeetCode刷题实战21:合并两个有序链表
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档