1. 题目

https://leetcode.cn/problems/remove-nth-node-from-end-of-list/
2. 解法
- 这道题的目标是删除链表中倒数第n个节点,例如,给定链表1->2->3->4->5和n=2,要求删除倒数第二个节点,即4,返回1->2->3->5。
这道题的解题思路:
- 我们可以使用两个指针来遍历链表,一个快指针和一个慢指针。快指针先走n步,然后快指针和慢指针同时向后移动,直到快指针到达链表尾部。此时,慢指针的下一个节点就是要删除的节点。
- 为了方便处理边界情况,我们可以使用一个虚拟头结点来连接原始链表。虚拟头结点的作用是在链表前面添加一个空节点,这样我们就不用担心删除的节点是第一个节点的情况。
- 我们可以通过修改慢指针的next指针来删除该节点。具体来说,我们让慢指针的next指针指向它的下下个节点,即跳过要删除的节点。这样就完成了删除操作。
- 最后,我们返回虚拟头结点的下一个节点,即原始链表的第一个节点,作为结果。
public class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
if (head == null) return null;
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode fast = dummy;
ListNode slow = dummy;
for (int i = 0; i < n; i++) {
fast = fast.next;
}
while (fast.next != null) {
fast = fast.next;
slow = slow.next;
}
slow.next = slow.next.next;
return dummy.next;
}
}
浙公网安备 33010602011771号