
合併兩個已排序的鍊錶是一個可以有效解決的常見問題。以下是如何使用 Java 以簡單且最佳的方式完成此操作。
步驟:
- 建立虛擬節點:使用虛擬節點來幫助簡化合併過程。該節點將作為合併清單的開始。
- 比較節點:比較兩個鍊錶的目前節點。將較小的節點附加到合併列表並將該列表的指標向前移動。
- 處理剩餘節點:如果一個清單先於另一個清單耗盡,則將未耗盡清單的剩餘節點附加到合併清單中。
- 回傳合併清單:合併清單從虛擬節點旁的節點開始。
Java實作:
雷雷
解釋:
ListNode 類別:
- 用一個整數值(val)和一個指向下一個節點(next)的指標來表示鍊錶中的每個節點。
mergeTwoLists 方法:
- 虛擬節點:虛擬節點(dummy)用於透過提供起點來簡化合併過程。
- 比較循環:我們遍歷兩個鍊錶,比較當前節點。較小的節點將添加到合併列表中,然後我們移動到該列表中的下一個節點。
- 剩餘節點:其中一個清單耗儘後,我們將另一個清單的剩餘部分直接附加到合併清單中。
- 回傳:最後,合併清單從虛擬節點旁的節點開始。
printList 方法:
主要方法:
- 建立兩個排序鍊錶:例如 1 -> 3-> 5和2-> 4-> 6.
- 合併清單:合併後的清單將為 1 -> 2-> 3-> 4-> 5-> 6.
- 列印清單:合併前後查看效果。
複雜:
- 時間複雜度: ( O(n + m) ),其中 ( n ) 和 ( m ) 是兩個鍊錶的長度。兩個清單中的每個節點都被處理一次。
- 空間複雜度:( O(1) ),因為除了幾個指標之外沒有使用額外的空間。
這種方法既簡單又適合合併兩個已排序的鍊錶,確保程式碼有效率且乾淨。
以上是用java簡單且最佳的方式合併兩個排序的鍊錶的詳細內容。更多資訊請關注PHP中文網其他相關文章!