19. Remove Nth Node From End of List
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?