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; } }