面試題18 刪除鍊錶的節點

2021-10-05 21:53:42 字數 1009 閱讀 6307

題目描述

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

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

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

示例 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為int型別值

遍歷刪除即可,注意特殊情況(如要刪除的為頭結點或鍊表裡沒有需要刪除的值等)

時間複雜度o(n)

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

}return head;}}

;

②val為listnode型別

如 head 為 4 -> 5 -> 1 -> 9,val 為 5 -> 1 -> 9,表示要刪除結點 5。

思路:把 val 改為 1 -> 9,即把val改為其下乙個節點值。即val.val = val->next.val;val->next = val->next->next。

此時的特殊情況:①val為最後乙個節點,不存在val->next,此時需遍歷刪除val。

②鍊錶只有乙個節點且需要刪除,直接返回null

時間複雜度o(1)

面試題18 刪除鍊錶的節點

給定單向鍊錶的頭指標和乙個要刪除的節點指標,定義乙個函式刪除該節點。思路 使用o 1 的方法來解決,將要刪除的的節點用下乙個節點來覆蓋就相當於是刪除了原節點。但有兩種特殊情況需要考慮,但鍊錶只有頭節點,即鍊錶只有乙個節點。二刪除的節點是尾節點,只用從頭for一遍 class listnode pub...

面試題18 刪除鍊錶的節點

給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點。返回刪除後的鍊錶的頭節點。注意 此題對比原題有改動 示例 1 輸入 head 4,5,1,9 val 5 輸出 4,1,9 解釋 給定你鍊錶中值為 5 的第二個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 4 1 9.示例 2 輸入...

面試題18 刪除鍊錶的節點

題目 給定單向鍊錶的頭指標和乙個要刪除的節點,定義乙個函式刪除該節點。示例輸入 head 4,5,1,9 val 5 輸出 4,1,9 題目中煉表節點值互不相同 解題思路 兩種方法,原理都差不多,定為節點,刪除引用。即都是通過找val的節點,然後將val前乙個節點的next指向val這個節點的nex...