leetcode 刪除連結串列倒數第n個節點(一次掃描)
阿新 • • 發佈:2019-01-14
題目描述
給定一個連結串列,刪除連結串列的倒數第 n 個節點,並且返回連結串列的頭結點。
演算法思想
採用一次掃描的辦法,需要定位到刪除節點的前面的節點
因此指標p往後挪動的個數為n+1次
注意如果p挪動之後,碰到空,說明刪除的是頭結點
使用兩個指標,一個從頭還是挪動,一個從p開始挪動,知道p為空,就找到了前面的指標,之後直接刪除即可
通過程式碼
class Solution:
def removeNthFromEnd(self, head, n):
"""
:type head: ListNode
:type n: int
:rtype: ListNode
"""
if head == None or n < 1:
return None
p = head
for i in range(n):
p = p.next
#如果p為None,那麼需要刪除頭結點
if p == None:
tempHead = head
head = head.next
del tempHead
return head
preNode = head
while p.next:
preNode = preNode.next
p = p.next
deleteNode = preNode.next
preNode.next = deleteNode.next
del deleteNode
return head
執行結果