iT邦幫忙

2025 iThome 鐵人賽

DAY 21
0
自我挑戰組

用java解Leetcode系列 第 21

用java解Leetcode Day21

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20251005/20169501Q2sNOlKkAM.pnghttps://ithelp.ithome.com.tw/upload/images/20251005/20169501m6Q6ilK3kg.png

  1. Merge Two Sorted Lists

這題「合併兩個已排序的鏈結串列」要求將兩個已經按照非遞減順序排序好的鏈結串列list1和list2合併成一個新的、同樣排序好的鏈結串列。
最終結果必須是透過拼接(splicing)原有的節點來構成,而不是創造全新的節點,並返回這個新的已合併鏈結串列的頭節點。

由於兩個輸入的鏈結串列都已排序,解題可以使用稱為雙指針迭代的方法來高效地完成合併,其核心思路是先創建一個特殊節點(例如:值為0),作為新合併鏈結串列的起點(就是虛擬節點頭)。這是處理鏈結串列合併或操作時的常見技巧。這樣做的好處是,不需要在合併開始時處理新鏈結串列頭節點的特殊情況,使代碼更簡潔。
接著,維護一個當前指針(current Pointer):這個指針(被稱之為current或tail)永遠指向新鏈結串列中最後一個已連接的節點。
在list1和list2兩個鏈結串列都沒有到達末尾時,要比較它們當前節點的值,並與虛擬頭節點連接,以下是其步驟:

1.比較當前節點的值,並選擇值較小的那個節點。

2.將current指針的next屬性指向這個較小的節點。

3.將被選中鏈結串列的指針向前移動一位。

4.將current指針也向前移動到剛剛連接的新節點。

當其中一個鏈結串列完全被遍歷完(即指針變為null)時,另一個鏈結串列中剩餘的所有節點(它們必然已經是排序好的)可以直接全部連接到current指針的後面。
最終,合併鏈結串列的頭節點就是虛擬頭節點的next。


上一篇
用java解Leetcode Day20
下一篇
用java解Leetcode 22
系列文
用java解Leetcode22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言