DAY 26
0

## [Day26] 30 天挑戰演算法 - 從List的尾巴刪除第N個節點

1. 如果要刪除的節點是 第一個節點
2. 如果要刪除的節點是最 後一個節點
3. 如果要刪除的節點是 非頭也非尾 的節點

dummyNode -> firstNode -> secondNode -> ... -> null

dummyNode.next = firstNode.next

dummyNode -> firstNode -> secondNode -> ...(N-1)thNode -> NthNode -> null

(N-1)thNode.next = NthNode.next

1. deleteNode (指向要被刪除的節點)
3. seekNode (最終要指向最後一個節點)
4. preDeleteNode (指向要被刪除的前一個節點)

1. 假設 N = 5, 則這三個指標節的關係如下

2. 假設 N = 1, 則這三個指標節點關係如下

3. 假設 N = 3, 則這三個指標節點關係如下

java 主要的流程

``````while( seekNode.next != null ) {
index += 1;
seekNode = seekNode.next;
if (index >= n)
deleteNode = deleteNode.next;
if (index >= n+1)
preDeleteNode = preDeleteNode.next;
}
``````

``````preDeleteNode.next = deleteNode.next;
return dummyNode.next;
``````

java 完整解答

``````public static ListNode remveFromEndNode(ListNode head, int n) {
return null;

ListNode dummyNode = new ListNode(0);

ListNode deleteNode = dummyNode;
ListNode preDeleteNode = dummyNode;
ListNode seekNode = dummyNode;
int index = 0;

while(seekNode.next != null) {
index += 1;

seekNode = seekNode.next;
if (index >= n)
deleteNode = deleteNode.next;
if (index >= n+1)
preDeleteNode = preDeleteNode.next;
}

preDeleteNode.next = deleteNode.next;
return dummyNode.next;
}
``````