LeetCode.237 刪除鏈表中的節點

這是我參與8月更文挑戰的第12天,活動詳情查看:8月更文挑戰node

題目描述:

237. 刪除鏈表中的節點 - 力扣(LeetCode) (leetcode-cn.com)python

請編寫一個函數,使其能夠刪除某個鏈表中給定的(非末尾)節點。傳入函數的惟一參數爲 要被刪除的節點 。markdown

  現有一個鏈表 -- head = [4,5,1,9],它能夠表示爲:app

image.png

示例一

輸入: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

image.png

但這道題只告訴咱們要刪除的節點,咱們並不知道該節點的上一個節點是什麼,這時候又該如何是好呢?lua

既然咱們要刪除一個節點時須要知道它的上一個節點,若是咱們沒法得知上一個節點,咱們就 找一個能夠知道上一個節點的節點,把它變成要刪除的節點,而後刪除它。

這樣聽起來好像有些拗口?沒事,直接看一個例子!

仍是 [4, 5, 1, 9] 鏈表,仍是刪除節點 5。

首先,咱們把節點 5 下一個節點的值賦給它,把它變成一個「不須要刪除」的節點:

image.png

這樣一來,第二個節點 1 和第三個節點 1,不管咱們刪除其中的哪個,均可以獲得最終結果 [4, 1, 9]。既然第二個節點很差刪除,那咱們就果斷刪除第三個啦~

改變第二個節點 1 的指針,將它指向第 4 個節點 9,這樣一來,第三個節點 1 就被刪除了:

image.png

AC代碼

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)

相關文章
相關標籤/搜索