删除倒数第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;
    }