本文正在参加「Java主题月 - Java 刷题打卡」,详情查看 活动链接
缘聚缘散缘如水,背负万丈尘寰,只为一句,等待下一次相逢。
文章首发于公众号 “蘑菇睡不着”,更多精彩内容欢迎关注
一、题目描述
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例 1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
提示:
0 <= 链表长度 <= 1000
二、思路分析:
这道题的逻辑就是两个链表从头开始遍历,一个一个比较大小,把小的节点放到一个新的头节点上,以此类推。直接代码效果会更好点
三、AC代码
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
// 新的头节点
ListNode dum = new ListNode(0), cur = dum;
while(l1 != null && l2 != null) {
// l1 小,讲节点放到头节点后, l1 向后移动
if(l1.val < l2.val) {
cur.next = l1;
l1 = l1.next;
} else {
cur.next = l2;
l2 = l2.next;
}
cur = cur.next;
}
// 最后看看那个链表还没有遍历完,直接整个接入到新链表后
cur.next = l1 != null ? l1 : l2;
return dum.next;
}
}
时间复杂度:O(M+N) : M, N 分别为两个链表的长度,合并操作需遍历两链表。 空间复杂度:O(1)
四、总结
这个要注意下遍历之后可能会有没遍历完的链表。