这道题是LeetCode里的第21道题。

题目描述:

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

示例:

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

这道题需要考虑的地方挺多的,首先是头节点的处理,还有尾节点的链接问题。对于头节点,我的想法是先对 l1, l2 的值进行比较,然后把 l1 指向头节点值小的,这样保证了 l1 绝对小于等于 l2,也就是说头节点的链接问题解决,中间部分好办,可以一个一个比较链接,也可以一块一块的链接,这里我使用的是一块一块的链接,而且对于尾部有三种情况需要考虑:

  • 同时到达尾部
  • l1 先到达尾部
  • l2 先到达尾部

具体代码中有所表现,自己可以画图理解理解。

解题代码:

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) { val = x; }* }*/
class Solution {public ListNode mergeTwoLists(ListNode l1, ListNode l2) {if(l1 == null)return l2;if(l2 == null)return l1;ListNode node1 = new ListNode(0);ListNode node2 = new ListNode(0);ListNode preNode1 = new ListNode(0);ListNode preNode2 = new ListNode(0);if(l1.val > l2.val) {node1 = l2;l2 = l1;l1 = node1;}//l1一定是小于等于l2node1 = l1;node2 = l2;preNode1 = l1.next;preNode2 = l2.next;while(preNode1 != null && preNode2 != null) {while(preNode1 != null && preNode1.val <= l2.val) {//说明是要从node1开始链接node1 = preNode1;preNode1 = node1.next;}while(preNode1 != null  && preNode2 != null && preNode2.val <= preNode1.val) {node2 = preNode2;preNode2 = node2.next;}if(preNode1 == null && preNode2 != null) break;//l1到达尾部,此时需要保证node1指向的是一个有效的节点node1.next = l2;node2.next = preNode1;l2 = preNode2;if(preNode1 != null)//如果l2到达尾部,则此时node2==null,也就是说这个时候整个连接操作已经完成node1 = preNode1;node2 = preNode2;if(preNode1 == null || preNode2 == null) break;//l2到达尾部preNode1 = preNode1.next;preNode2 = preNode2.next;}if(node2 != null) {//判断l2是否到达尾部while(node1.next != null && node1.next.val < node2.val) {node1 = node1.next;}if(node1.next != null) {//此时node2!=null,判断node1是否等于nullnode2.next = node1.next;//不等于则把node1后大于node2值的节点链接至node2node1.next = node2;//然后node1再链接node2}else {node1.next = node2;//等于直接把node2链接至node1}}return l1;}
}

提交结果:

个人总结:

这题错误次数比较多,原因在于最后的节点处理不当,多次造成循环链表或者是顺序错误,或是节点缺失。

转载于:https://www.cnblogs.com/1000sakura/p/10743268.html

【LeetCode】Merge Two Sorted Lists(合并两个有序链表)相关推荐

  1. LeetCode in Python-21. Merge Two Sorted Lists 合并两个有序链表

    Merge Two Sorted Lists 合并两个有序链表 题目 解法1. 解法2. 出处 题目 解法1. # Definition for singly-linked list. # class ...

  2. [LeetCode] Merge k Sorted Lists 合并k个有序链表

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. E ...

  3. 合并k个有序链表 python_[LeetCode] 23. Merge k Sorted Lists 合并k个有序链表

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. E ...

  4. leetcode第21题: 合并两个有序链表

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

  5. LeetCode第 21 题:合并两个有序链表(C++)

    leetcode链接 第一种方法(借助其他标准库容器) 遍历两个链表将元素均存入容器中(例如vector,或者multiset会更好吗?),调用泛型算法sort进行元素排序,最后在新建链表将排序好的元 ...

  6. Merge Sorted Array 合并两个有序数组

    1.原题目 Given two sorted integer arrays A and B, merge B into A as one sorted array. Note: You may ass ...

  7. LeetCode 21.23.剑指 Offer II 078. 合并两个有序链表 | C语言版

    LeetCode 21. 合并两个有序链表 | C语言版 LeetCode 21. 合并两个有序链表 题目描述 解题思路 思路一:使用栈 代码实现 运行结果 参考文章: 思路二:减少遍历节点数 代码实 ...

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

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

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

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

最新文章

  1. 数据结构之跳表Skiplist
  2. fcm和firebase_我如何最终使Netlify Functions,Firebase和GraphQL一起工作
  3. 用HAproxy+keepalived+mysql Replication 构建基于企业级负载均衡
  4. oracle vm virtualbox安装centos并配置Java环境
  5. 在linux下给grep命令添加颜色
  6. React中setState修改深层对象
  7. 第六节:深入研究Task实例方法ContinueWith的参数TaskContinuationOptions
  8. MySQL(23)--- 正则表达式
  9. 【java】Java 最坑爹的 10 大功能点
  10. emmet工具使用和技巧
  11. C#.Net 调用Java的Web Service
  12. 关闭Dynamipsgui的自动更新
  13. 学计算机二级的免费软件,计算机二级MS模拟软件
  14. 二 不插SIM卡的GPRS模组-AIR202通过AT指令链接阿里云
  15. 程序员工资一般多少_一般程序员真实工资 程序员工资薪酬大起底
  16. C++ OpenCV遍历并处理一个文件夹中的所有图片
  17. C++ 命令行参数解析
  18. kubernetes(k8s)第五部分之K8s部署nginx
  19. ue4 改变枢轴位置_UE4实时渲染深入探究----学习总结【上篇】
  20. xp网络发现不了自己的计算机,xp系统“网络发现”功能启用不了的方案介绍

热门文章

  1. 阿里巴巴超越腾讯重新成为中国市值最高上市公司!
  2. 「软件测试」刚从腾讯面试出来,留下了这些面试笔记
  3. Android 完整漂亮问卷、试卷 -- 支持单选、判断、不定项
  4. python编程快速上手自动化_《Python编程快速上手 让繁琐工作自动化》完整版PDF...
  5. mongodb书籍_我为什么放弃MySQL,选择了MongoDB?看到这个数据你就会明白了
  6. “命令终端”的实现3-命令的执行
  7. 分割view窗口不响应onmousewheel_什么是响应者链?ios面试攻克篇(三)
  8. 【SpringCloud】Spring cloud Alibaba seata 分布式事务
  9. 【Clickhouse】Clickhouse 数据字典
  10. 【Java】Java对象转换成Map