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

浙公网安备 33010602011771号