輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的結點仍然是按照遞增排序的。
遞迴實現:合併過程中,每次都是從兩個鍊錶中找出較小的乙個來鏈結,因此可以採用遞迴來實現:當任意乙個鍊錶為null時,直接鏈結另乙個鍊錶即可;其餘情況只需要在兩個鍊錶中找出較小的乙個結點進行鏈結,該結點的next值繼續通過遞迴函式來鏈結
注意:
每當**試圖訪問空指標指向的記憶體時,程式就會崩潰,從而導致魯棒性問題,本題中一旦輸入空的鍊錶就會引入空的指標,因此我們要對空鍊錶單獨處理。
1.當第乙個鍊錶為空鍊錶,就把它和第二個鍊錶合併,顯然結果是第二個鍊錶
2.當第2個鍊錶為空鍊錶,就把它和第1個鍊錶合併,顯然結果是第1個鍊錶
3.當兩個鍊錶都為空時,結果直接返回空
public class merge
public listnode(int val, listnode next)
}public listnode merge(listnode list1, listnode list2)
if (list2 == null)
listnode mergenode;
if (list1.val < list2.val) else
return mergenode;
}//正常功能測試
@test
public void test1()
//當乙個鍊錶為空
@test
public void test2()
}//當2個鍊錶為空
@test
public void test3()
}
劍指offer 合併兩個排序列表
題目描述 輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。簡單,但是有三種方法 1.建立乙個額外鍊錶 最好理解,但是浪費空間 public listnode merge listnode list1,listnode list2 else if p2 nu...
劍指offer25 合併兩個有序鍊錶
題目描述 輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的節點仍然是遞增排序的。解題思路 雙指標 分別指向兩個鍊錶的頭,比較大小即可。問題 如何合併?建立偽頭節點temp,節點cur指向temp,將比較後的節點插入到cur後,最後將不為null的鍊錶中剩餘節點新增到cur之後即可。參考題解 pu...
劍指offer 合併兩個鍊錶
輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。新建乙個節點作為head,依次遍歷兩個陣列 時間複雜度 o n 空間複雜度 o 1 coding utf 8 class listnode def init self,x self.val x self.ne...