LeetCode HOT100 - 删除链表的倒数第 N 个结点

要一轮结束的话显然需要双指针

但这次快慢指针不可行,因为我们是要固定找为节点的前 n 个

因此计数

每次都同时移动一个单位的话那么两个指针的间隔是相同的

所以我们不妨构造两个间隔为 n 的,这样快的那个到达尾部之后,慢的那个恰好来到了距离尾部 n 个的位置

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode *r = head, *l = head;
        while (n--) {
            r = r->next;
        }
        if (!r) {
            return l->next;
        }
        while (r->next) {
            l = l->next;
            r = r->next;
        }
        l->next = l->next->next;
        return head;
    }
};
posted @ 2026-04-16 23:47  rdcamelot  阅读(15)  评论(0)    收藏  举报