思路:
- 使用dummy大法连接原始链表head;
- 使用快慢指针 fast slow;
- for循环 ,使fast指针向next方向移动 (n+1) 步;
- fast 指针和 slow 指针一起向next方向移动,直到fast指针为空结束,目的是为了通过slow指针找到要删除的节点delNode;
- 删除delNode 节点;
- 返回dummy的下一个节点
手撸代码
public ListNode removeNthFromEnd(ListNode head,int n){
ListNode dummy =new ListNode(-1);
dummy.next = head;
ListNode slow = dummy;
ListNode fast = dummy;
for(int i = 0;i<=n;i++){
fast = fast.next;
}
while(fast!=null){
fast = fast.next;
slow = slow.next;
}
ListNode delNode = slow.next;
slow.next = delNode.next;
delNode.next = null;
return dummy.next;
}