问题描述
解题思路
首先设置一个虚拟头节点pre
,pre->next = head
;
双指针法,考虑使用两个指针fast
,slow
,一快一慢,fast
指针先前进n
个位置,然后fast
和slow
一起遍历,当fast
到达最后一个节点的时候,slow
刚好位于要删除的节点的前一个节点。
代码
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode *pre = new ListNode(0, head);
ListNode *fast = pre, *slow = pre;
for (int i = 0; i < n; i++) {
fast = fast->next;
}
while (fast->next != nullptr) {
fast = fast->next;
slow = slow->next;
}
slow->next = slow->next->next;
return pre->next;
}
};
标签:node,pre,slow,end,fast,next,链表,ListNode,节点
From: https://www.cnblogs.com/zwyyy456/p/16917489.html