题目:
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
合并链表,很简单的题目。这里提供两种解法,一是循环一个是递归,貌似所有的链表的题目都可以用这两种方法解决==
先看循环法,这里我试了两种方案,但出乎意料的是被注释的部分反而效果更好,好尴尬==
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode res = new ListNode(-1);
ListNode l3 = res;
while(l1 != null && l2 != null){
if(l1.val <= l2.val){
l3.next = l1;
l1 = l1.next;
l3 = l3.next;
}else{
l3.next = l2;
l2 = l2.next;
l3 = l3.next;
}
}
if(l1 == null){
l3.next = l2;
}else if(l2 == null)
l3.next = l1;
// while(l1!=null){
// l3.next = l1;
// l1 = l1.next;
// l3 = l3.next;
// }
//
// while(l2!=null){
// l3.next = l2;
// l2 = l2.next;
// l3 = l3.next;
// }
return res.next;
}
然后再看递归的方法,思路很简单也很直接,不多说:
public ListNode mergeTwoLists1(ListNode l1, ListNode l2){
if(l1 == null)
return l2;
if(l2 == null)
return l1;
ListNode mergeHead;
if(l1.val < l2.val){
mergeHead = l1;
mergeHead.next = mergeTwoLists1(l1.next, l2);
}else{
mergeHead = l2;
mergeHead.next = mergeTwoLists1(l1, l2.next);
}
return mergeHead;
}