給定一個連結清單,删除連結清單的倒數第 n 個節點,并且傳回連結清單的頭結點。
示例:
給定一個連結清單: 1->2->3->4->5, 和 n = 2.
當删除了倒數第二個節點後,連結清單變為 1->2->3->5.
說明:
給定的 n 保證是有效的。
進階:
你能嘗試使用一趟掃描實作嗎?
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode p = head;
ListNode q = head;
// p先移動n個位置
for (int i = 0; i < n; i ++){
p = p.next;
}
if( p == null){
head = head.next;
return head;
}
// 當p達到尾部
while(p.next != null){
p = p.next;
q = q.next;
}
q.next = q.next.next;
return head;
}
}