public static ListNode delN(ListNode pHead, int n) { if (pHead == null || n < 1) { return null; } //统计链表长度 int size = 0; //n节点前节点指针 ListNode nPre = null; //快指针 ListNode fast = pHead; for (int i = 1; fast != null; i++) { //当快指针走了n步,慢指针开始走,那么就是i>=n,但这里慢指针定义为前指针所以应该慢走一步,i>n if (i > n) { if (nPre == null) { nPre = pHead; }else { nPre = nPre.next; } } //快指针遍历整个链表 fast = fast.next; size++; } //n符合要求的话,这步可以省略 if (n > size) { return pHead; } //删除头节点 if (n == size) { return pHead.next; } //删除操作 ListNode node = nPre.next; if (node != null) { ListNode next = node.next; node = null; nPre.next = next; } return pHead; }