給定一個鏈表,刪除鏈表的倒數第 n 個節點,並且返回鏈表的頭結點。
示例:
給定一個鏈表: 1->2->3->4->5, 和 n = 2.
當刪除了倒數第二個節點後,鏈表變爲 1->2->3->5.
說明:
給定的 n 保證是有效的。
進階:
你能嘗試使用一趟掃描實現嗎?
題目大意
刪除單鏈表的倒數第N個結點,注意:輸入的N都是合法,在一次遍歷中完成操作。
解題思路
先讓一個指針走找到第N個節點,然後再讓一個指針指向頭結點,然後兩具指針一起走,直到前一個指針直到了末尾,後一個指針就是倒數第N+1個結點,刪除倒數第N個結點就可以了。
代碼實現
public class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode pa=head;
ListNode pb=head;
//注意:pa指向第n+1個節點
for (int i=0;i<n&&pa!=null;i++){
pa=pa.next;
}
if (pa == null) {
head = head.next;
return head;
}
// pb與pa相差n-1個結點
// 當pa.next爲null,pb在倒數第n+1個位置
while (pa.next!=null){
pa=pa.next;
pb=pb.next;
}
pb.next=pb.next.next;
return head;
}
}