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)