【LeetCode】Merge Two Sorted Lists(合并两个有序链表)
这道题是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(合并两个有序链表)相关推荐
- LeetCode in Python-21. Merge Two Sorted Lists 合并两个有序链表
Merge Two Sorted Lists 合并两个有序链表 题目 解法1. 解法2. 出处 题目 解法1. # Definition for singly-linked list. # class ...
- [LeetCode] Merge k Sorted Lists 合并k个有序链表
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. E ...
- 合并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 ...
- leetcode第21题: 合并两个有序链表
题目描述: 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3 ...
- LeetCode第 21 题:合并两个有序链表(C++)
leetcode链接 第一种方法(借助其他标准库容器) 遍历两个链表将元素均存入容器中(例如vector,或者multiset会更好吗?),调用泛型算法sort进行元素排序,最后在新建链表将排序好的元 ...
- Merge Sorted Array 合并两个有序数组
1.原题目 Given two sorted integer arrays A and B, merge B into A as one sorted array. Note: You may ass ...
- LeetCode 21.23.剑指 Offer II 078. 合并两个有序链表 | C语言版
LeetCode 21. 合并两个有序链表 | C语言版 LeetCode 21. 合并两个有序链表 题目描述 解题思路 思路一:使用栈 代码实现 运行结果 参考文章: 思路二:减少遍历节点数 代码实 ...
- 《LeetCode力扣练习》第21题 合并两个有序链表 Java
<LeetCode力扣练习>第21题 合并两个有序链表 Java 一.资源 题目: 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例 ...
- LeetCode 21合并两个有序链表22括号生成
微信搜索bigsai,回复进群,加入打卡.维护不易,欢迎点赞支持! 合并两个有序列表 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1 ...
最新文章
- 数据结构之跳表Skiplist
- fcm和firebase_我如何最终使Netlify Functions,Firebase和GraphQL一起工作
- 用HAproxy+keepalived+mysql Replication 构建基于企业级负载均衡
- oracle vm virtualbox安装centos并配置Java环境
- 在linux下给grep命令添加颜色
- React中setState修改深层对象
- 第六节:深入研究Task实例方法ContinueWith的参数TaskContinuationOptions
- MySQL(23)--- 正则表达式
- 【java】Java 最坑爹的 10 大功能点
- emmet工具使用和技巧
- C#.Net 调用Java的Web Service
- 关闭Dynamipsgui的自动更新
- 学计算机二级的免费软件,计算机二级MS模拟软件
- 二 不插SIM卡的GPRS模组-AIR202通过AT指令链接阿里云
- 程序员工资一般多少_一般程序员真实工资 程序员工资薪酬大起底
- C++ OpenCV遍历并处理一个文件夹中的所有图片
- C++ 命令行参数解析
- kubernetes(k8s)第五部分之K8s部署nginx
- ue4 改变枢轴位置_UE4实时渲染深入探究----学习总结【上篇】
- xp网络发现不了自己的计算机,xp系统“网络发现”功能启用不了的方案介绍
热门文章
- 阿里巴巴超越腾讯重新成为中国市值最高上市公司!
- 「软件测试」刚从腾讯面试出来,留下了这些面试笔记
- Android 完整漂亮问卷、试卷 -- 支持单选、判断、不定项
- python编程快速上手自动化_《Python编程快速上手 让繁琐工作自动化》完整版PDF...
- mongodb书籍_我为什么放弃MySQL,选择了MongoDB?看到这个数据你就会明白了
- “命令终端”的实现3-命令的执行
- 分割view窗口不响应onmousewheel_什么是响应者链?ios面试攻克篇(三)
- 【SpringCloud】Spring cloud Alibaba seata 分布式事务
- 【Clickhouse】Clickhouse 数据字典
- 【Java】Java对象转换成Map