給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點。
返回刪除後的鍊錶的頭節點。
注意:此題對比原題有改動
示例 1:
輸入:head = [4,5,1,9], val = 5示例 2:輸出:[4,1,9]
解釋:給定你鍊錶中值為 5 的第二個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 4 -> 1 -> 9.
輸入:head = [4,5,1,9], val = 1按照慣例放上乙個我自己的解法,這次我認為我的解法好像更好一點點,因為能節省乙個變數的空間,雖然。。。乙個變數的空間也沒有什麼用輸出:[4,5,9]
解釋:給定你鍊錶中值為 1 的第三個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 4 -> 5 -> 9.
# definition for singly-linked list.
# class listnode:
# def __init__(self, x):
# self.val = x
# self.next = none
class
solution
:def
deletenode
(self, head: listnode, val:
int)
-> listnode:
while head.val == val:
head = head.
next
result = head
while head.
next
isnot
none
:if head.
next
.val == val:
head.
next
= head.
next
.next
else
: head = head.
next
return result
大神的解題思路本題刪除值為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
指向 nul
lnull
null
,代表鍊錶中不包含值為val
的節點。
返回值:返回鍊錶頭部節點 head 即可。
# definition for singly-linked list.
# class listnode:
# def __init__(self, x):
# self.val = x
# self.next = none
class
solution
:def
deletenode
(self, head: listnode, val:
int)
-> listnode:
while head.val == val:
head = head.
next
result = head
pre = result
cur = result.
next
while cur is
notnone
:if cur.val == val:
pre.
next
= cur.
next
pre = cur
cur = cur.
next
return result
劍指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.常規思路 定義乙個暫時變數用來刪除節點...