https://leetcode.com/problems/merge-two-sorted-lists/description/
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.
Example:
Input: 1->2->4, 1->3->4
Output: 1->1->2->3->4->4
1 // time o(n): while loop sapce o(1): one stack 2 public ListNode mergeTwoLists(ListNode l1, ListNode l2) { 3 ListNode dummy = new ListNode(0); 4 ListNode curr = dummy; 5 // l1 l2 two heads w e dont need to keep, so we use them as counter: so we dont need to check l1.next or l2.next 6 while (l1!=null && l2 != null){ 7 if (l1.val <= l2.val){ 8 curr.next = l1 ; 9 l1 = l1.next ; 10 }else{ 11 curr.next = l2; 12 l2 = l2.next ; 13 } 14 curr = curr.next ; 15 } 16 //either side is null, check the other 17 if (l1 != null){ 18 curr.next = l1 ; 19 } 20 if (l2 != null){ 21 curr.next = l2 ; 22 } 23 //serve as default for if either l1 is null or l2 is null or reach the end 24 return dummy.next; 25 } 26 27 /* 28 * Input: 1->2->4, 1->3->4 29 Output: 1->1->2->3->4->4 30 * */ 31 // time: o(n) space: o(n)-recursive on n stacks 32 public ListNode mergeTwoLists2(ListNode l1, ListNode l2) { 33 /* recursive: subproblem: l1,l2 -> l1.next or l2.next but not l1.next && l2.next 34 * rule: l1.val <= l2 l1.next->l1.next 35 * l2.val< l1 l2.next->l2.next 36 * base l1 == null return l2; l2 == null return l1 37 * */ 38 if (l1 == null) return l2 ; 39 if (l2 == null) return l1 ; 40 if (l1.val <= l2.val){ 41 l1.next = mergeTwoLists2(l1.next, l2); 42 return l1 ; 43 } else{ 44 l2.next = mergeTwoLists2(l1, l2.next) ; 45 return l2 ; 46 } 47 //这样写的错误在于,L1 L2 只链接了一个点 48 // ListNode newHead = mergeTwoLists2(l1.next, l2.next) ; 49 // if (l1.val <= l2.val) { 50 // l1.next = newHead ; 51 // return l1 ; 52 // } else{ 53 // l2.next = newHead ; 54 // return l2 ; 55 // } 56 }