思路是快慢指针,快指针比慢指针先走N步,当快指针的next为null时,快指针刚好指向待删除元素的上一个节点!
:19. 删除链表的倒数第 N 个结点
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode fast=head,slow=head;
if(head==null||n<0){
return head;
}
int nums=n;
while(nums>0&&fast.next!=null){
fast=fast.next;
--nums;
}
//还没走完N步就退出循环,说明要删除第一个元素!
//删除第一个元素
if(nums>=1){
head = slow.next;
return head;
}
while(fast!=null&&fast.next!=null){
fast=fast.next;
slow=slow.next;
}
slow.next=slow.next.next;
return head;
}
}