【剑指Offer】合并两个有序单链表的递归解法和非递归解法
非递归解法:需要定义一个懒节点,因为l1和l2可能为空。
1 class Solution { 2 public ListNode mergeTwoLists(ListNode l1, ListNode l2) { 3 ListNode merge = new ListNode(-1); 4 ListNode cur = merge; 5 while(l1 != null && l2 != null){ 6 if(l1.val > l2.val){ 7 cur.next = l1; 8 l1 = l1.next; 9 }else{ 10 cur.next = l2; 11 l2 = l2.next; 12 } 13 cur = cur.next; 14 } 15 if(l1 != null){ 16 cur.next = l1; 17 } 18 if(l2 != null){ 19 cur.next = l2; 20 } 21 return merge.next; 22 } 23 }
递归解法:
1 class Solution { 2 public ListNode mergeTwoLists(ListNode l1, ListNode l2) { 3 ListNode merge = null; 4 if(l1 == null){ 5 return l2; 6 } 7 if(l2 == null){ 8 return l1; 9 } 10 if(l1.val > l2.val){ 11 merge = l1; 12 merge.next = mergeTwoLists(l1.next,l2); 13 }else{ 14 merge = l2; 15 merge.next = mergeTwoLists(l2.next,l1); 16 } 17 return merge; 18 } 19 }

浙公网安备 33010602011771号