這是我參與8月更文挑戰的第12天,活動詳情查看:8月更文挑戰node
237. 刪除鏈表中的節點 - 力扣(LeetCode) (leetcode-cn.com)python
請編寫一個函數,使其能夠刪除某個鏈表中給定的(非末尾)節點。傳入函數的惟一參數爲 要被刪除的節點 。markdown
現有一個鏈表 -- head = [4,5,1,9],它能夠表示爲:app
輸入:head = [4,5,1,9], node = 5
輸出:[4,1,9]
解釋:給定你鏈表中值爲 5 的第二個節點,那麼在調用了你的函數以後,該鏈表應變爲 4 -> 1 -> 9.
複製代碼
輸入:head = [4,5,1,9], node = 1
輸出:[4,5,9]
解釋:給定你鏈表中值爲 1 的第三個節點,那麼在調用了你的函數以後,該鏈表應變爲 4 -> 5 -> 9.
複製代碼
提示:ide
這題有點滑頭了,鏈表沒有給出head,有點不同。函數
題解中有個講的很清楚的,我就摘抄了oop
若是咱們要在鏈表中刪除一個節點,通常的操做是:post
修改要刪除節點的上一個節點的指針 將該指針指向要刪除節點的下一個節點 例如,在鏈表 [4, 5, 1, 9] 中,當咱們要刪除節點 5 時,咱們會修改節點 5 上一個節點 4 的指針,讓它指向節點 5 的下一個節點,即節點 1:ui
但這道題只告訴咱們要刪除的節點,咱們並不知道該節點的上一個節點是什麼,這時候又該如何是好呢?lua
既然咱們要刪除一個節點時須要知道它的上一個節點,若是咱們沒法得知上一個節點,咱們就 找一個能夠知道上一個節點的節點,把它變成要刪除的節點,而後刪除它。
這樣聽起來好像有些拗口?沒事,直接看一個例子!
仍是 [4, 5, 1, 9] 鏈表,仍是刪除節點 5。
首先,咱們把節點 5 下一個節點的值賦給它,把它變成一個「不須要刪除」的節點:
這樣一來,第二個節點 1 和第三個節點 1,不管咱們刪除其中的哪個,均可以獲得最終結果 [4, 1, 9]。既然第二個節點很差刪除,那咱們就果斷刪除第三個啦~
改變第二個節點 1 的指針,將它指向第 4 個節點 9,這樣一來,第三個節點 1 就被刪除了:
class Solution {
fun deleteNode(node: ListNode?) {
node?.`val` = node?.next?.`val`
node?.next = node?.next?.next
}
}
複製代碼
這題難到不難,就是略坑,leetcode的題目可讀性真是不行。
刪除鏈表中的節點 - 刪除鏈表中的節點 - 力扣(LeetCode) (leetcode-cn.com)
圖解刪除鏈表中的節點 | Python/Golang - 刪除鏈表中的節點 - 力扣(LeetCode) (leetcode-cn.com)