将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
https://leetcode-cn.com/problems/merge-two-sorted-lists/
//方法1:新建一个链表,选择两个链表的待插入节点中较小的那个节点插入新链表的尾部
public ListNode mergeTwoLists2(ListNode l1, ListNode l2) {
if (l1 == null){
return l2;
}
if (l2 == null){
return l1;
}
ListNode head = new ListNode(-1);
ListNode res = head;
while (l1 != null && l2 != null){
if (l1.val < l2.val){
res.next = l1;
l1 = l1.next;
res = res.next;
}else{
res.next = l2;
l2 = l2.next;
res = res.next;
}
}
res.next = (l1 == null)? l2 : l1;
return head.next;
}
//方法2:递归,将较小的值作为排好序的链表的头节点
public ListNode mergeTwoLists1(ListNode l1, ListNode l2) {
if (l1 == null){
return l2;
}
if (l2 == null){
return l1;
}
if (l1.val < l2.val){
l1.next = mergeTwoLists(l1.next,l2);
return l1;
}else{
l2.next = mergeTwoLists(l1,l2.next);
return l2;
}
}
//方法3:选择头节点值小的链表作为返回链表的头,然后把另一个链表按照大小插入到返回链表中
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if (l1 == null){
return l2;
}
if (l2 == null){
return l1;
}
ListNode res = null;
ListNode res2 = null;
if (l1.val <= l2.val){
res = l1;
res2 = l2;
}else{
res = l2;
res2 = l1;
}
ListNode temp1 = res;
ListNode temp2 = res2;
while(temp2 != null){
while (temp1.next != null && temp1.next.val <= temp2.val){
temp1 = temp1.next;
}
ListNode temp3 = temp2;
temp2 = temp3.next;
temp3.next = temp1.next;
temp1.next = temp3;
}
return res;
}