 闽公网安备 35020302035485号
                
                闽公网安备 35020302035485号
                删除链表倒数第N个结点,首先肯定是要找到结点位置的,所以就看怎么快速找第N个位置。
思路1:假设链表长度为L,那么倒数第N个位置就是正数的第L-N+1个位置,比较简单吧,一个班50个同学,倒数第2名,那就是正数第49名(50-2+1)。
思路2:快慢指针,来两个指针,第一个先走N步,然后第一个和第二个一起开始走,第一个走到末尾了,第二个走到N-1的位置,下一个位置就是N。思路3:使用递归进行删除。
public void remove(ListNode head, int n) {
    if (head != null) {
        remove(head.next, n);
    }
}
完善private int cur = 0;
public void remove(ListNode head, int n) {
    if (head != null) {
        remove(head.next, n);
        if (cur++ == n) {
            head.next = head.next.next;
        }
    }
}
细节public ListNode removeNthFromEnd(ListNode head, int n) {
    remove(head, n);
    return cur == n ? head.next : head;
}
回顾