cpp
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode *dummy = new ListNode( 0 );
dummy->next = head;
ListNode *fast = dummy;
ListNode *slow = dummy;
for ( int i = 0; i < n + 1; i++ ) {
fast = fast->next;
}
while ( fast != nullptr ) {
fast = fast->next;
slow = slow->next;
}
ListNode *del = slow->next;
slow->next = slow->next->next;
delete del;
return dummy->next;
}
};
- 删除倒数第 N 个结点;
- 先让 fast 领先 N + 1 个单位,当 fast 为空,slow 和 fast 中间隔了 N 个结点,slow 是待删除结点的前驱;
- slow 的后继指向后继的后继,然后删除后继,释放内存。