LeetCode19刪除連結串列的倒數第N個節點
阿新 • • 發佈:2018-11-11
題目描述:
給定一個連結串列,刪除連結串列的倒數第 n 個節點,並且返回連結串列的頭結點。
示例:
給定一個連結串列: 1->2->3->4->5, 和 n = 2.
當刪除了倒數第二個節點後,連結串列變為 1->2->3->5.
說明:
給定的 n 保證是有效的。
解題思路:
大體想到了兩個思路:
-
先說暴力的方法。先遍歷一遍連結串列,可以得知總計有多少的節點。刪除倒數第n個,就等同於刪除正數第 個。遍歷兩次連結串列就肯定可以解決。函式複雜度也就是
-
想用遍歷一次連結串列就實現該功能的話,就需要使用兩個指標。一個指標先行一步,當前一個指標走了n步之後,後一個指標再動身。這樣,等第一個指標走到最後的時候,後面的指標跳過其下一個節點,就表示刪除了該節點了。這個方法不難理解,關鍵就是需要能夠對連結串列及“指標”有著較好的理解,能夠處理好邊界條件。
程式碼實現:
Python3實現,Github: https://github.com/zhangdianlei/LeetCode_python/blob/master/src/c19.py
class Solution:
def removeNthFromEnd(self, head, n):
"""
:type head: ListNode
:type n: int
:rtype: ListNode
"""
result = ListNode(0)
first = result
second = result
result.next = head
for i in range(n+1):
first = first.next
while first is not None:
first = first.next
second = second.next
second.next = second.next.next
return result.next