劍指 Offer 18 刪除鍊錶的節點

2021-10-22 01:34:49 字數 1588 閱讀 3626

2.遞迴法

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

示例 1:

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

輸出: [4,1,9]

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

本題刪除值為 val 的節點分需為兩步:定位節點、修改引用。

定位節點: 遍歷鍊錶,直到head.val == val時跳出,即可定位目標節點。

修改引用: 設節點cur的前驅節點為pre,後繼節點為cur.next;則執行pre.next = cur.next,即可實現刪除cur節點。

特例處理: 當應刪除頭節點 head 時,直接返回 head.next 即可。

初始化: pre = head , cur = head.next 。

定位節點: 當 cur 為空 或 cur 節點值等於 val 時跳出。

儲存當前節點索引,即 pre = cur 。

遍歷下一節點,即 cur = cur.next 。

刪除節點: 若 cur 指向某節點,則執行 pre.next = cur.next ;若 cur 指向 null,代表鍊錶中不包含值為 val 的節點。

返回值: 返回鍊錶頭部節點 head 即可。

class

solution

if(cur != null) pre.next = cur.next;

return head;

}}

第一步,定義遞迴函式:

public listnode deletenode

(listnode head,

int val)

確定終止條件:上述函式表示的是刪除鍊錶中值為val的結點,當鍊表為空時,我們無法做刪除操作,所以遞迴的終止條件是head == null

if

(head == null)

如果head結點不等於空,並且head結點的值等於val,我們直接返回head結點的下乙個結點

if

(head.val == val)

否則也就是說頭結點是刪不掉的,我們就遞迴呼叫,從頭結點的下乙個開始繼續上面的操作,直到刪除為止。

else

return head;

class

solution

if(head.val == val)

else

return head;

}}

劍指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 刪除鍊錶的結點

typedef int datatype typedef struct listnode listnode 建立結點 static listnode createnode datatype data 鍊錶初始化 void listinit listnode ppfirst 鍊錶銷毀 void lis...

劍指offer 18 刪除鍊錶的節點

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