這是乙個中等難度的問題在王道考研教材中也有提及,但是時間過得過於久遠,思路已經模糊不清了,這裡設定了乙個頭節點,將刪除首元素以及其他元素的操作統一了起來,使用了雙指標的技巧,解決該問題。
# definition for singly-linked list.
# class listnode:
# def __init__(self, x):
# self.val = x
# self.next = none
class
solution
:def
removenthfromend
(self, head: listnode, n:
int)
-> listnode:
node =listnode(
none
) node.
next
=head
quick,slow=node,node
for i in
range
(n):
quick=quick.
next
while
(quick.
next
!=none):
quick=quick.
next
slow=slow.
next
slow.
next
=slow.
next
.next
return node.
next
值得注意的是這裡不能返回head,因為這個時候head沒有做出任何改變,改動而且應返回的鍊錶實際上是node,這一點很好理解,請讀者仔細思考。 LeetCode 019 刪除鍊錶的倒數第N個節點
019 刪除鍊錶的倒數第n個節點 給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點。示例 給定乙個鍊錶 1 2 3 4 5,和 n 2.當刪除了倒數第二個節點後,鍊錶變為 1 2 3 5.方法 雙指標法 思路 定義兩個指標指向頭節點,將第乙個指標移動n個節點,然後兩個一起移動,直到第...
LeetCode 019 刪除鍊錶的倒數第N個節點
給定乙個鍊錶,刪除鍊錶的倒數第 n 個節點,並且返回鍊錶的頭結點 用兩個指標,其中乙個先 走 先走的指標先走n步 然後兩個指標再同時走,當先走的指標指向最後乙個節點時,後走的指標指向要刪除的節點的上乙個節點 注意 如果先走的指標走完n步後已經為null,則說明要刪除的是頭節點 definition ...
019 刪除鍊錶的倒數第N個節點
1 使用兩次遍歷 2 listnode removenthfromend listnode head,int n 10 11 p head 12if len n 13return head next 14for int j 0 j len n 1 j 1718 p next p next next ...