将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 1:
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
示例 2:
输入:l1 = [], l2 = []
输出:[]
示例 3:
输入:l1 = [], l2 = [0]
输出:[0]
解题
两个链表都是升序排列,只需要将两个链表依次比较 再拼接成一个链表即可。
public ListNode mergeTwoLists(ListNode l1,ListNode l2){
//先判断两个链表是否为空,为空返回另一个
if(l1 == null || l2 == null){
return l1==null?l2:l1;
}
//确定哪一个链表当头
ListNode head = l1.val<=l2.val?l1:l2;
//选中的链表从第二个节点开始循环
ListNode cur1 = head.next;
//确认cur2是那个链表
ListNode cur2 = l1==head?l2:l1;
//pre做置换,头部为head
ListNode pre = head;
//只要有一个链表等于null就跳出循环
while(cur1!=null && cur2!=null){
//判断值大小排序
if(cur1.val<=cur2.val){
//新链表移位
pre.next = cur1;
//链表一向后一位
cur1=cur1.next
}else{
pre.next = cur2;
cur2 = cur2.next;
}
pre = pre.next;
}
//一个链表为空,把别一个链表后边添加到新链表上
pre.next = cur1==null?cur2:cur1
return head;
}