输出链表中倒数第k个节点,尾结点是第1个。
如果要得到倒数第k个节点,则fast先走k步,然后他俩一起走,当fast为null时,slow为倒数第k个。
所以如果要删除第k个,则得到的是倒数第k+1个,则需要少走一步,但有哑节点的话fast为null,slow正好为被删除节点的前一个。
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
if(head==null){
return null;
}
ListNode root=new ListNode(0,head);
ListNode fast=head;
for(int i=0;i<n;i++){
fast=fast.next;
}
ListNode slow=root;
while(fast!=null){
fast=fast.next;
slow=slow.next;
}
slow.next=slow.next.next;
return root.next;
}
}