官方给了两种方法一种是求出要遍历的长度,然后遍历后在将那个的指针指向next.next。
下面这中写法也是这个意思,一开始可能会有点懵
其实是把fast的长度当作遍历的长度,
Remove Nth Node From End of List
//method 1: iterative
//assumption: n is always valid
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode fast = head;
for (int i = n; i > 0; i--) { //move f n times from head
fast = fast.next;
}
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode slow = dummy;
while (fast != null) {//以第一个剩下的为遍历值
fast = fast.next;
slow = slow.next;
}//post: fast is null, slow is at one node before the toDelete
slow.next = slow.next.next;
return dummy.next;
}