劍指Offer 題25(合併兩個排序的鍊錶)

2021-09-26 09:00:17 字數 869 閱讀 4681

輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的結點仍然是按照遞增排序的。

遞迴實現:合併過程中,每次都是從兩個鍊錶中找出較小的乙個來鏈結,因此可以採用遞迴來實現:當任意乙個鍊錶為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...