算法题:剑指 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