连接
快慢指针
:快指针quick
,慢指针slow
,同时需要保存slow
之前的一个节点用作将slow节点删除
;
首先quick指针先走n步,然后两个指针一起走,当quick指针走到链表尾部的时候,则此时slow走到倒数第n个节点,此时可以将pre.next=slow.next
进行删除,因为可能将头节点删除,因此可以采用哨兵机制
package CLinkedList;
public class Problem19 {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode virtual = new ListNode(-1);
virtual.next=head;
ListNode prev = virtual;
ListNode quick = head;
ListNode slow = head;
for(int i=0;i<n;i++){
quick = quick.next;
}
while(quick!=null){
quick = quick.next;
prev = slow;
slow=slow.next;
}
prev.next = slow.next;
return virtual.next;
}
}