[题目链接](剑指 Offer II 021. 删除链表的倒数第 n 个结点 - 力扣(LeetCode) (leetcode-cn.com))
思路
- 前后双指针,第一个指针先向前移动n个结点,然后第一个指针和第二个指针再同时移动。
- 第一个指针与第二个指针之间相隔n个结点,所以当第一个指针到达尾结点时,第二个指针到达倒数第n个结点。
代码
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummy = new ListNode(0);//哨兵节点
dummy.next = head;
ListNode front = head, second = dummy;
for(int i = 0; i < n; i++) {
front = front.next;
}
while(front != null) {
front = front.next;
second = second.next;
}
second.next = second.next.next;
return dummy.next;
}
}