输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
限制:
0 <= 链表长度 <= 1000 分析:
因为两个链表都是升序的,所以我们只需要创建一个新的节点,每次遍历将两个链表中最小的节点接给他,然后在对下一个节点继续操作即可,当一个链表遍历完时,将另一个链表所有节点接给它就是我们需要的链表了。需要注意的是,因为对下一个节点操作就需要将当前节点赋为下一个节点,所以最终的节点其实是最后一个节点,所以我们要在一开始定义一个节点指向头节点,因为每次遍历是将新节点接给当前节点,所以最终返回头节点的下一个节点。
时间复杂度:O(m+n) m,n为两个链表的长度
空间复杂度:O(1)
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
//定义头节点,在复制一个节点,对复制的节点进行操作
ListNode head = new ListNode(0), node = head;
//遍历
while(l1 != null && l2 != null){
//每次获取小的值为新节点的值
if(l1.val <= l2.val){
node.next = l1;
l1 = l1.next;
}else{
node.next = l2;
l2 = l2.next;
}
node = node.next;
}
//把没遍历的补上
node.next = l1 == null? l2: l1;
return head.next;
}
}
题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof



