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

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

题目描述


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


示例


示例 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之后,能更清晰的解答这道题。

相关文章
|
2天前
|
算法
LeetCode刷题---21.合并两个有序链表(双指针)
LeetCode刷题---21.合并两个有序链表(双指针)
|
2天前
|
算法
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
|
2天前
|
算法 测试技术
LeetCode刷题--- 430. 扁平化多级双向链表(深度优先搜索)
LeetCode刷题--- 430. 扁平化多级双向链表(深度优先搜索)
|
2天前
|
存储
实现单链表的基本操作(力扣、牛客刷题的基础&笔试题常客)
实现单链表的基本操作(力扣、牛客刷题的基础&笔试题常客)
145 38
|
2天前
【力扣】21. 合并两个有序链表
【力扣】21. 合并两个有序链表
|
2天前
|
算法
算法系列--链表刷题(二)(下)
算法系列--链表刷题(二)(下)
18 0
|
2天前
数据结构--链表刷题(一)快慢指针(上)
数据结构--链表刷题(一)快慢指针
16 0
|
2天前
|
存储 算法
LeetCode刷题--- 61. 旋转链表(快慢指针+闭合为环)
LeetCode刷题--- 61. 旋转链表(快慢指针+闭合为环)
|
2天前
|
算法 索引
LeetCode刷题--- 138. 复制带随机指针的链表(哈希表+迭代)
LeetCode刷题--- 138. 复制带随机指针的链表(哈希表+迭代)
|
2天前
|
存储 算法 索引
LeetCode刷题---链表经典问题(双指针)
LeetCode刷题---链表经典问题(双指针)