【刷题】合并两个有序链表

简介: 【刷题】合并两个有序链表

题目描述


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


示例


示例 1:


微信图片_20221112161224.jpg


输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例 2:

输入:l1 = [], l2 = []
输出:[]

示例 3:

输入:l1 = [], l2 = [0]
输出:[0]

提示:


两个链表的节点数目范围是 [0, 50]

-100 <= Node.val <= 100

l1 和 l2 均按 非递减顺序 排列


解题思路


  1. 看到这道题我首先去学习了一下Go list的知识,go是有提供list标准库的
  2. 和本题有关系的非常重要的方法是Next()


func (e *Element) Next() *Element {}会返回元素"e"的下一个元素。


  1. 因为题目中已经告诉我们,参数是2个升序的有序链表,瞬间就降低了解题难度
  2. 我的思路是这样:借助 Next()方法每次获得更小的那个元素,拼接到新的list中就可以了。
  3. 具体的解题代码,请查看下面的代码段,写了非常清晰的注释。


AC代码


func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode { 
    //生成list
    var ret = new(ListNode) 
    cur := ret 
    //当l1和l2都不为空时循环遍历
    for l1 != nil && l2 != nil {
        //如果l1<l2时 那么把cur.Next设置为l1
        if l1.Val < l2.Val{
            cur.Next = l1
            l1 = l1.Next
        //否则 把cur.Next设置为l2
        }else {
            cur.Next = l2
            l2 = l2.Next
        }
        //我们的原则是 本次循环中小的值赋值给cur
        cur = cur.Next 
    }
    //兼容到l1或者l2为空的情况
    if l1 != nil {
        cur.Next = l1
    }
    if l2 != nil {
        cur.Next = l2
    }
    return ret.Next
}


运行结果

微信图片_20221112161227.jpg


总结


我们熟练掌握了Go语言的List之后,能更清晰的解答这道题。

相关文章
|
25天前
|
程序员
【刷题记录】移除链表元素
【刷题记录】移除链表元素
|
1月前
|
索引 Python
【Leetcode刷题Python】328. 奇偶链表
在不使用额外空间的情况下,将链表中的奇数和偶数索引节点重新排序的方法,并提供了相应的Python实现代码。
26 0
|
1月前
|
Python
【Leetcode刷题Python】114. 二叉树展开为链表
LeetCode上114号问题"二叉树展开为链表"的Python实现,通过先序遍历二叉树并调整节点的左右指针,将二叉树转换为先序遍历顺序的单链表。
19 3
【Leetcode刷题Python】114. 二叉树展开为链表
|
23天前
|
算法
LeetCode第21题合并两个有序链表
该文章介绍了 LeetCode 第 21 题合并两个有序链表的解法,通过创建新链表,依次比较两个链表的头节点值,将较小的值插入新链表,直至其中一个链表遍历完,再将另一个链表剩余部分接到新链表后面,实现合并。
LeetCode第21题合并两个有序链表
|
25天前
【刷题记录】链表的回文结构
【刷题记录】链表的回文结构
|
25天前
|
算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
38 5
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 18. 删除链表的节点
Leetcode题目"剑指 Offer 18. 删除链表的节点"的Python解决方案,通过使用双指针法找到并删除链表中值为特定数值的节点,然后返回更新后的链表头节点。
30 4
|
1月前
|
存储 Python
【Leetcode刷题Python】23. 合并K个升序链表
合并K个升序链表的方法:使用数组排序的暴力求解法、使用小顶堆的高效方法,以及分而治之的策略,并提供了相应的Python实现代码。
12 1
|
25天前
|
机器学习/深度学习
【刷题记录】相交链表
【刷题记录】相交链表