19. Remove Nth Node From End of List

Link

Solution

使用快慢節點slow, fast ,讓兩個節點的差距剛好是n, 然後一起走一輪。

當fast到達最後一個node時, slow就是要被刪除的點的前一個點

當有刪除node求結果時:

都要使用另一個startNode, startNode.next = head, 這樣來處理。

這題的另一個要點是, 要透過dummy Node當頭去iterate以解決,刪完之後沒有Node的condition

ex. [1], 1 -> [0]

  public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode start = new ListNode(0);
        start.next = head;
        ListNode fast = start;
        ListNode slow = start;
        while(fast.next != null){
            fast = fast.next;
            if(n <= 0) slow = slow.next;
            n--;
        }
        
        if(slow.next != null){
            slow.next = slow.next.next;
        }
        
        return start.next;
    }

Last updated

Was this helpful?