记录链表的题

力扣题目链接 : https://leetcode.cn/problems/merge-two-sorted-lists/

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

示例1:

输入: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 均按 非递减顺序 排列

思路:

两个有序的链表合并其实思路很简单,我们比较两个链表的值,如果第一个链表节点的值大于第二个链表节点的的值,那么就将第一个链表的指针指向第二个链表的节点,相反,则第一个链表向下跳一个即可。

  • 我们首先要判断链表是否是null,判断边界条件很重要
 if(head1 == null || head2 == null){return head1 == null ? head2 : head1;   // 返回其中一个链表}
  • 我们是不是还得知道那个链表做头啊,那个链表的头部的值最小,那个就做小头
 ListNode head = head1.val <= head2.val ? head1 : head2;
  • 然后我们需要定义三个节点,分别用来指向小头的下一个节点,和指向大头(第二个链表值比小头的大)的节点,以及需要一个指向和小头的节点。
 ListNode cur1 = head.next; // 指向小头的下一个节点ListNode cur2 = head == head1 ? head2 : head1; // 直接指向大头,因为不知道那个是大头,所以需要三目运算符判断一下ListNode pre = head;  // 指向小头的节点
  • 最后while循环链表,判断大小,并修改指针

完整代码如下:

class Solution {public ListNode mergeTwoLists(ListNode head1, ListNode head2) {if(head1 == null || head2 == null){return head1 == null ? head2 : head1;}ListNode head = head1.val <= head2.val ? head1 : head2; // 这个就是最终要返回的小头结点ListNode cur1 = head.next; // 指向小头的下一个节点ListNode cur2 = head == head1 ? head2 : head1; // 直接指向大头ListNode pre = head;// 当链表没有循环到空的时候,继续while(cur1 != null && cur2 != null){// 如果小头的下一个节点的值(cur1上面已经定义过了,是小头的下一个节点)大于等于大头的值时候。if(cur1.val >= cur2.val){ pre.next = cur2; // 修改pre指针指向cur2cur2 = cur2.next; // cur2随之向后移动一下。}else{pre.next = cur1; // 否则,pre指向cur1cur1 = cur1.next; // cur1随之向后移动一下。}pre = pre.next; // 跳它自己的下一个位置,pre节点跳到下一个位置。}pre.next = cur1 != null ? cur1 : cur2; // 最后,跳出循坏后,pre肯定指向的是null值,所以,我们只需要让她指向下一个不是空链表的链表。return head;}
}

OK!打完收工!

链表---合并两个有序链表相关推荐

  1. 【每日一算法】 合并两个有序链表

    微信改版,加星标不迷路! 每日一算法-合并两个有序链表 作者:阿广 阅读目录 1 题目 2 解析 1 题目 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. ...

  2. 【Java】leetCode 21 合并两个有序链表

    题目 : 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 解题思路 : 1.依据以上两个升序链表进行拼接: 2.先定义一个傀儡节点newHead,用来 ...

  3. 合并两个有序链表分析

    合并两个有序链表: 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: l1 l2 输入:1->2->4, 1->3->4 ...

  4. 《LeetCode力扣练习》第21题 合并两个有序链表 Java

    <LeetCode力扣练习>第21题 合并两个有序链表 Java 一.资源 题目: 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例 ...

  5. 算法:合并两个有序链表

    题目 合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1- ...

  6. LeetCode题组:第21题-合并两个有序链表

    1.题目:合并两个有序链表 将两个升序链表合并为一个新的升序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出: ...

  7. LeetCode 21合并两个有序链表22括号生成

    微信搜索bigsai,回复进群,加入打卡.维护不易,欢迎点赞支持! 合并两个有序列表 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1 ...

  8. 2019-03-21-算法-进化(合并两个有序链表)

    题目描述 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1-& ...

  9. fastreport 打印两个list_Smaller And Smarter Python数据结构:合并两个有序链表

    原创: 老表 简说Python 今日问题 :翻转链表k个相邻结点 """目标:写一段程序,合并两个有序链表例如:输入-> 1->2->3输入-> ...

  10. C语言怎么合并两个有序链表

    C语言合并两个有序链表的方法:拼接指定的两个有序链表的所有节点即可.例如两个有序链表分别为[1->2->4]和[1->3->4],合并后的有序链表为[1->1->2 ...

最新文章

  1. [moka同学笔记]redis练习Demo
  2. 【c++】27.事件驱动、IO复用、sellect、poll、epoll三者的区别
  3. 汤加近海处电缆或已断裂 修复需两周以上!淡水成最紧俏资源!
  4. python动态规划详解_python----动态规划
  5. 设计模式 C++外观者模式
  6. Java之美[从菜鸟到高手演变]之Exception
  7. Bailian4003 十六进制转十进制【十六进制】
  8. c++重载++和--
  9. 基于深度学习的目标检测
  10. Photoshop cc2015基础课笔记
  11. 1、Django下载与搭建、配置环境变量
  12. 插值拟合模型 之 Hermite插值、三次样条插值
  13. 2019版本VS 社区版本 30天试用期 过期的解决方法
  14. php公众号模板在哪,微信公众号模板哪里找?公众号如何套用模板?
  15. 局部加权回归Loess对比MFCC三角滤波(吴恩达机器学习中说,Loess算法用到了aircraft的自动驾驶中)
  16. 360查出 HEUR/Malware.QVMxx.Gen 病毒含义
  17. Python绘制股票趋势图
  18. 【计算机网络】网页相关基础知识(万维网,HTTP,动态网页)
  19. 【U8】登录提示缺少根元素
  20. CTP下单与持仓查询

热门文章

  1. QQ隐藏福利二-----------------那些免费的挂件和气泡
  2. 阿铭Linux_网站维护学习笔记201903029
  3. h5算命php源码,H5付费算命PHP源码那么火_付费算命源码如何下载
  4. 笔记-51,k60,stm32
  5. 测量图上点位平面位置\高程中误差怎么计算?
  6. 一种改进CA-CFAR算法及其MATLAB编程实现,论文仿真——《基于LFMCW雷达多目标检测的CA-CFAR改进算法》
  7. FTP、FTPS 与 SFTP 简介
  8. 专题:固体力学中应力与应变分析详解(5.主方向与主应力)
  9. 大华摄像机调试以及保存视频
  10. Powermill数控编程培训,潇洒模具三步教您精通cnc数控编程