18 刪除鍊錶節點

2021-10-06 21:45:50 字數 1463 閱讀 9185

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

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

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

示例 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 被刪除的節點

雙指標:

def deletenode(self, head: listnode, val: int) -> listnode:

if head.val == val:

return head.next

pre = head

cur = head.next

while cur and cur.val!=val:

pre = cur

cur = cur.next

if cur:

pre.next = cur.next

return head

遍歷鍊錶,如果鍊錶第乙個資料等於val,那就直接刪除第乙個元素,return head.next

如果不是,建立雙指標,pre是前驅節點,cur是當前節點,鍊錶中的刪除操作是,pre.next =cur.next。

當 當前節點不為空且當前節點的值不為val的時候,雙指標往後移乙個節點。

當 cur為空(即遍歷完鍊錶) 或者 cur.val =val的時候跳出迴圈

因為跳出第乙個迴圈的情況有兩種:

* cur.val =val , 那就執行刪除節點操作,

pre.next =cur.next

* 遍歷完鍊錶,但是沒有找到val值, 那就沒有刪除操作,返回 head。

單指標:

def deletenode(self, head: listnode, val: int) -> listnode:

p = listnode(-1)

p.next = head

q = p

while p.next:

if p.next.val == val:

p.next = p.next.next

break

p = p.next

return q.next

感覺跟雙指標的思路也差不多,此外,這個**新建了乙個節點作為頭節點的前驅節點,這樣就不用專門去考慮第乙個節點val是val的情況了

18 刪除鍊錶的節點

在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5 1.首先新增乙個頭節點,以方便碰到第乙個,第二個節點就相同的情況 2.設定 pre last 指標,pre指標指向當前確定不重複的那個節點,而l...

18 刪除鍊錶的節點

class node object 節點類 def init self,data self.num data self.next none class deletenode object 實現刪除指定節點功能 defdelete node self,head,delnode if head none...

JZ 18 刪除鍊錶的節點(鍊錶)

設當前節點指標 cur curcu r 和前驅節點指標 pre prepr e,遍歷鍊錶找到目標節點後執行 pre nex t cu r.ne xtpre.next cur.next pre.ne xt c ur.n ext 即可刪除 cur curcu r 節點 演算法流程 definition ...