题目简介
题目解决技巧
使用双指针和虚拟头节点实现最后第几个节点删除
题目陷阱
- 不存在不能删除节点
- 边界条件为慢指针的下一个节点是否为空
- 不存在头节点为空的情况
解题代码
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummy = new ListNode(1, head);
ListNode fast = head;
ListNode slow = dummy;
int time = n;
while(fast != null){
if (n != 0){
fast = fast.next;
n--;
}else {
slow = slow.next;
fast = fast.next;
}
}
if (slow.next != null){
slow.next = slow.next.next;
}
return dummy.next;
}