李代桃僵 刪除節點 Delete Node in a Linked List_Leetcode #237

閱讀時間約 4 分鐘

題目敘述

題目給定一個鏈結串列中的節點Node,要求我們從鏈結串列中刪除該節點。

題目保證該節點不是tail node。

題目要求我們in-place原位操作。


原本的英文題目敘述


測試範例

Example 1:

Input: head = [4,5,1,9], node = 5
Output: [4,1,9]
Explanation: You are given the second node with value 5, the linked list should become 4 -> 1 -> 9 after calling your function.

Example 2:

Input: head = [4,5,1,9], node = 1
Output: [4,5,9]
Explanation: You are given the third node with value 1, the linked list should become 4 -> 5 -> 9 after calling your function.

約束條件

Constraints:

  • The number of the nodes in the given list is in the range [2, 1000].

節點總數目介於2~1000之間。

  • -1000 <= Node.val <= 1000

節點值介於-1000~1000之間。

  • The value of each node in the list is unique.

每個節點值都不同。

  • The node to be deleted is in the list and is not a tail node.

目標節點絕對存在,而且不是tail node。


演算法 李代桃僵

其實這題算是有變化,需要轉個彎思考的題目。

一般來說,Linked list的題目會先給head node,再給目標節點或目標值進行操作。

但是這題只有給目標節點,要求我們刪除目標節點。

困難點就在於,要如何更新linkage 新的連接?


原本輸入的樣子是

... -> 前一個節點 -> 目標節點 -> 後一個節點 -> ...

刪除之後,應該要變成

... -> 前一個節點 -> 後一個節點 -> ...


但是題目沒有給head node,根本沒辦法知道 前一個節點是誰

因此,就有了替代的解法,李代桃僵(俗稱的替死鬼),原本是要刪除目標節點,但是我們改成刪除後一個節點,並且拷貝後一個節點的值到我自己身上,這樣的形狀就會和原本的相同


原本輸入的樣子是

... -> 前一個節點 -> 目標節點 -> 後一個節點 -> ...

李代桃僵,刪除後一個節點,變成

... -> 前一個節點 -> 目標節點(擁有原本後一個節點的節點值) -> ...


示意圖

raw-image



程式碼 李代桃僵

class Solution:
def deleteNode(self, node):

# locate victim node
victim_node = node.next

# overwrite node's value by victim node's value
node.val = victim_node.val

# break the linkage of victim node
node.next = victim_node.next

# release victim node
del victim_node

return

複雜度分析

時間複雜度: O(1)

只涉及兩個節點的操作,為常數時間。


空間複雜度: O(1)

所需要的都是臨時變數,為常數級別O(1)。


關鍵知識點

困難點就在於,要如何更新linkage 新的連接?

題目沒有給head node,根本沒辦法知道 前一個節點是誰

因此,就有了替代的解法,李代桃僵(俗稱的替死鬼),原本是要刪除目標節點,但是我們改成刪除後一個節點,並且拷貝後一個節點的值到我自己身上,這樣的形狀就會和原本的相同


Reference

[1] Delete Node in a Linked List - LeetCode

53會員
341內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
創作者要怎麼好好休息 + 避免工作過量?《黑貓創作報#4》午安,最近累不累? 這篇不是虛假的關心。而是《黑貓創作報》發行以來可能最重要的一篇。 是的,我們這篇講怎麼補充能量,也就是怎麼休息。
Thumbnail
avatar
黑貓老師
2024-06-29
周處除三害電影結局是什麼?電影亮點這裡看最近《周處除三害》在Netflix上線啦!一起來看看周處除三害有哪些電影亮點?電影結局如何吧!
Thumbnail
avatar
小陳同學
2024-03-27
與「龍王」締結善緣、招感「龍王」賜福|龍王供養祈福、招財、除障、祛病法會|月月供養龍王偉大 蓮花生大士曾開示:「供養龍族很重要,所以我傳下了許多供養龍族的法門(例如:龍王煙供法、龍王寶瓶等)。未來的弟子應當依照時節供養龍族眾生,不然未來的地、水等災害將極為可怖。」若有幸具足福德因緣得能修持殊勝《龍王煙供法》,將龍藥煙供藉由修法儀軌加持轉化為遍滿虛空的妙欲受用,來供養龍族眾生,使龍族的
Thumbnail
avatar
湛藍的天空
2024-02-23
慶讚 吉祥天母節──觀音山 2023吉祥天母息災除障大法會-登記祛病祈福祿位每年藏曆十月十五日是 吉祥天母節,藏語稱為「白拉日卓」。在藏傳佛教的寺廟都會舉辦大大小小與 吉祥天母有關的法會。在十五日清晨,來自各地的藏族善男信女,依據傳統會紛紛聚集到大昭寺的門口,向 吉祥天母敬獻卡達,開始一年一度的「吉祥天母節」。 吉祥天母是示現女身的第一大空行護法,具極大加持力,靈感異常,
Thumbnail
avatar
觀音山吉祥洲
2023-10-08
觀音山2023年孝親‧報恩‧祈福‧迴向 中元普度盂蘭盆法會 法會壇場功德主✦結緣除障大祿位及超薦大蓮位|供養三寶、供花供「觀音山 孝親‧報恩‧祈福‧迴向 中元普度盂蘭盆法會」將於9月9日、10日,於臺中健行國小盛大隆重舉辦。凡所有成為本場法會功德主,將為您所發心之金額圓滿平均地護持當日法會壇城布置、軟硬體設備、供養三寶薈供品、供花、供燈、蔬食打齋,法會籌備及宣傳等各項所需,一日之中圓滿建立功德,福慧滿盈。
Thumbnail
avatar
觀音山吉祥洲
2023-09-06
avatar
西莉亞煮婦週記
2023-05-04
三十六計第11計:李代桃僵李樹跟桃樹相鄰,本來可能讓桃樹枯死的害蟲,跑到李樹那邊,讓李樹枯死了。看起來像是個事故,但是有可能是個故事。 做為敵戰計之一,李代桃僵是與敵方旗鼓相當時所用的計謀。 大勢所趨,在一定會發生損害的時候,就需要有所取捨,因為什麼都捨不得,就什麼都得不到⋯⋯
avatar
洗丹青
2023-02-27
083-《我們是小小廚神》主題歌[小鮮廚在我家]第三季節目發表#小朋友的廚藝節目-主題歌開播。 之前我們寫的主題歌《我們是小小廚神》竟然在《小鮮廚在我家》第三季播出了,好開心♥️本來等到花兒都謝了。 在2022年11月3日上午《小鮮廚 在我家》第三季開播發布會在中國兒童中心舉行。 第三季節目已於11月5日在央視網上線首播。 與眾不同的節目型態,兒童視角和專業
Thumbnail
avatar
方晴君
2022-11-06
浴室廚房天花板的裝修5大流程順序與細節 | PVC天花板裝修懶人包,看這篇就夠了 裝修浴室廚房天花板(PVC)有一定的施工順序與流程 ,五大流程詳細解說一次公開
Thumbnail
avatar
林文傑
2021-07-04
不會結束的故事:《山徑躊躇》這個故事沒有結尾;或者說,主角們從頭到尾都不曾安定下來,如同標題的「躊躇」二字。小說從丈夫突然自殺開始,妻子帶著兒子前往台東檳榔村,遇見與部落發生摩擦的藝術家。
Thumbnail
avatar
Angus Yen
2020-08-16
8/1-8/31金洹苑頂級燒肉鍋物放題【父親節限定主廚私房菜單】和牛吃到飽77折優惠文、圖/金洹苑提供   2019年創立的「金洹苑」,店內裝潢採取日式的典雅樸質,以京都感濃厚的復古木質調打造,並將到日本必吃的燒肉與台灣人熱愛的火鍋結合,主打精緻「燒肉鍋物放題」,每人只要1080元即可同時享有頂級的日式鍋物與燒肉吃到飽,店內提供超過60種的高檔食材,嚴選Prime等級的冷藏濕
Thumbnail
avatar
廣告雜誌
2020-08-07