给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
分析:
链表题其实有很多都是双指针,或是称为快慢指针的解法。这道题主要是要学会虚拟头结点的使用,所谓虚拟头结点,就是在所给头结点的前面再新建一个新的值为0的节点。这样做的好处是可以防止需要删除的对象为头结点这种情况。
参考代码:
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode pre=new ListNode(0);
pre.next=head;
ListNode slow=pre,fast=pre;
while(n!=0){
fast=fast.next;
n—;
}
fast=fast.next;
while(fast!=null){
fast=fast.next;
slow=slow.next;
}
slow.next=slow.next.next;
return pre.next;
}
