【Leet-Code】19. 刪除鏈表的倒數第N個節點

 

【題目解析】


採取雙重遍歷肯定是可以解決問題的,但題目要求我們一次遍歷解決問題,那我們的思路得發散一下。

我們可以設想假設設定了雙指針 slow 和 fast 的話,當 fast 指向末尾的 NULL,slow 與 fast 之間相隔的元素個數爲 n 時,那麼刪除掉 slow 的下一個指針就完成了要求。

  • 設置虛擬節點 result_ListNode 指向 head;
  • 設定雙指針 slow 和 fast ,初始都指向虛擬節點 result_ListNode;
  • 移動 fast ,直到 slow 與 fast 之間相隔的元素個數爲 n;
  • 同時移動 slow 與 fast ,直到 fast 指向的爲 NULL;
  • 將 slow 的下一個節點指向下下個節點;
# 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:
        result_ListNode = ListNode(0)
        result_ListNode.next = head 

        fast, slow = result_ListNode, result_ListNode

        for i in range(n):
            fast = fast.next

        while fast.next:
            slow = slow.next
            fast = fast.next 

        slow.next = slow.next.next

        return result_ListNode.next

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章