倒数第n个节点其实就是顺数第 count-n+1 个节点,但是我们要删除这个节点就先要走到 第 count-n 个节点上去,p.next=p.next.next 就成功了。但是要注意的时候有可能 n == count 也就是说要删除链表头节点的时候要注意

public ListNode removeNthFromEnd (ListNode head, int n) {
    // write code here
    if(head==null){
        return null;
    }
    ListNode p=head;
    int count=0;
    while(p!=null){//先遍历一遍找到链表节点数
        p=p.next;
        count++;
    }
    int k=count-n;//计算我们要找的第 count-n 个节点
    ListNode p1=new ListNode(0);//整个节点出来
    p1.next=head;
    ListNode p2=p1;//记住假节点的引用
    while(k>0){//找到第 count-n 个节点
        p1=p1.next;
        k--;
    }
    p1.next=p1.next.next;//断开
    return p2.next;//返回假节点的 next
}