删除倒数第n个节点,就是删除正数第m-n+1个节点,所以可以定义一个快指针,让它先走n步,快指针距离链表尾部还有m-n步,然后慢指针开始移动,当快指针移动到最后一个节点的时候,慢指针走走到了第m-n个节点,然后直接删除即可
public ListNode removeNthFromEnd (ListNode head, int n) { // write code here if (head == null){ return null; } ListNode node = new ListNode(-1); node.next = head; ListNode p = node; ListNode q = node; while (q.next != null){ while (n-- > 0){ q = q.next; } if (q.next == null){ break; } p = p.next; q = q.next; } p.next = p.next.next; return node.next; }