劍指 18 刪除鍊錶的節點 難度簡單

2021-10-21 10:07:56 字數 1039 閱讀 9636

給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點。

返回刪除後的鍊錶的頭節點。

注意:此題對比原題有改動

示例 1:

輸入: head = [4,5,1,9], val = 5

輸出: [4,1,9]

解釋: 給定你鍊錶中值為 5 的第二個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 4 -> 1 -> 9.

示例 2:

輸入: head = [4,5,1,9], val = 1

輸出: [4,5,9]

解釋: 給定你鍊錶中值為 1 的第三個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 4 -> 5 -> 9.

說明:題目保證鍊錶中節點的值互不相同

若使用 c 或 c++ 語言,你不需要 free 或 delete 被刪除的節點

思路:刪除鍊錶某個節點,需要額外記錄一下待刪除節點的前一節點,並且刪除頭節點在這裡單獨考慮。

(考慮一些特殊情況,如 頭節點、尾節點、不存在的val)

/**

* @param head

* @param val

* @return

*/var deletenode = function(head, val)

//刪除中間節點和尾節點

while(curr.val != val)else

}if(curr)else

return head;

};

2、**優化

我的提交的**執行用時較長,這裡對一些細節進行了改進,**變簡潔了並且執行用時變短了。

var deletenode = function(head, val) 

let prev = head;

let curr = head.next;

//刪除中間節點和尾節點

while(curr && curr.val != val)

if(curr)

return head;

};

劍指18 刪除鍊錶的節點

題目 給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點。返回刪除後的鍊錶的頭節點。分析 刪除結點很簡單,只需要知道被刪除結點的前一結點即可,先求出前一結點,然後刪除即可。這裡給出兩種方法,建議使用第二種雙指標,這裡雙指標只需要將乙個指標去搜查被刪除的結點,另乙個指標跟著這個指標的後...

劍指offer18 刪除鍊錶節點

1.考慮輸入空鍊錶和乙個節點鍊錶 2.如果頭節點不重複,直接遞迴查詢重複 3.雙指標,進行判斷兩個節點是不是相等 coding utf 8 class listnode def init self,x self.val x self.next none class solution def dele...

劍指offer 18 刪除鍊錶的節點

描述 給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點。返回刪除後的鍊錶的頭節點。示例 輸入 head 4,5,1,9 val 5 輸出 4,1,9 解釋 給定你鍊錶中值為 5 的第二個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 4 1 9.常規思路 定義乙個暫時變數用來刪除節點...