16 圖解劍指Offer 合併兩個排序的鏈表 Java題解

16 圖解劍指Offer 合併兩個排序的鏈表 Java題解

題目鏈接

題目描述

輸入兩個單調遞增的鏈表,輸出兩個鏈表合成後的鏈表,當然我們需要合成後的鏈表滿足單調不減規則。

題解:

1.if判斷list1是否爲null,如果爲null 直接返回list2。
1.else if判斷list2是否爲null,如果爲null 直接返回list1。
每次遞歸找到較小的節點,然後較小節點的next等於 除去這個較小的節點的鏈表和另一個鏈表合併。第一次判斷list1,list2誰的頭節點值小就返回誰。
3.else if判斷 list1.val < list2.val,如果爲true list1.next = Merge(list1.next, list2); return list1;
4.else判斷 list1.val > list2.val,如果爲true list2.next = Merge(list1, list2.next); return list2;

圖解:

在這裏插入圖片描述

代碼:

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
//遞歸
public class Solution {
    public ListNode Merge(ListNode list1,ListNode list2) {
       if(list1 == null) {
           return list2;
       } else if (list2 == null) {
           return list1;
       } else if (list1.val < list2.val) {
           list1.next = Merge(list1.next, list2);
           return list1;
       } else {
           list2.next = Merge(list1, list2.next);
           return list2;
       }       
    }
}

複雜度

空間複雜度: 空間複雜度爲O(1)
最壞時間複雜度: 遍歷時間複雜度O( logn)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章