算法题:剑指 Offer 25. 合并两个排序的链表(题目+思路+代码+注释)时空 O(N) O(1) 1ms击败68%、70%用户
题目
剑指 Offer 25. 合并两个排序的链表
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
限制:
0 <= 链表长度 <= 1000
注意:本题与主站 21 题相同:https://leetcode-cn.com/problems/merge-two-sorted-lists/
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
其实就是搞个循环不断的从两个链上去拿第一个节点,比较大小,拿最小的,一个个节点的把新链组装好。遍历掉两条链就完成了。很简单,是个简单题不多解释,代码有注释。
代码
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
// ret 是第一个节点,用来返回,p是用来存当前正在处理的节点
ListNode ret = null,p = null;
//两个链上还有数据
while (l1 !=null || l2 != null){
//暂存从两根链上取出哪个节点
ListNode t = null;
if (l1 != null && l2 != null){
//两条链都有节点
if (l1.val > l2.val){
t = l2;
l2 = l2.next;
}else {
t = l1;
l1 = l1.next;
}
}else if (l1 != null){
//只有第一条链有节点
t = l1;
l1 = l1.next;
}else {
//只有第二条链有节点
t = l2;
l2 = l2.next;
}
//如果还没有头结点
if (p == null){
ret = p = t;
}else {
//正在处理的节点的下一个节点等于取到的节点
p.next = t;
//当前节点往下一个移
p = p.next;
}
}
return ret;
}
本文来自博客园,作者:HumorChen99,转载请注明原文链接:https://www.cnblogs.com/HumorChen/p/18039552
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
2020-08-29 C语言指针深入理解通俗易懂各种案例分析(代码+注释)