class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode fast = head;
ListNode slow = head;
for(int i = 0; i < n; i++) {
fast = fast.next;
}
if(fast == null) {
return head.next;
}
fast = fast.next;
while(fast != null){
fast = fast.next;
slow = slow.next;
}
slow.next = slow.next.next;
return head;
}
}
答案解析: 本题采用快慢指针的思想
定义一个快指针,一个慢指针,快指针先走n步,然后慢指针再走。这样当快指针走到尾部时,慢指针刚好走到倒数第n个节点的位置,然后将慢指针的next指向慢指针的下下一个节点,返回head节点即可。
其中,如果快指针等于null, 那么就证明要删除的是第一个节点,直接return head.nex