涉及到指针的常见标准化策略:为保证删第一个节点和删中间节点操作一致,新建节点指向head.
间隔n个的元素:两个指针,一个快指针,一个慢指针。在快指针指向队尾时,慢指针应指向目标元素。
本例中,慢指针默认为新建元素,快指针为默认指向头节点,初始使快慢指针相差n个元素,则当快指针指向队尾时,慢指针的下一个元素即为要被删除的元素。
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode node =new ListNode(0);
node.next=head;
ListNode post=node;
ListNode prior = head;
for (int i = 0; i < n-1; i++) {
prior = prior.next;
}
while(prior.next!=null){
prior=prior.next;
post=post.next;
}
post.next=post.next.next;
return node.next;
}