【剑指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 }

 

posted @ 2020-06-06 15:31  xd会飞的猫  阅读(176)  评论(0)    收藏  举报