步骤:
1.定义fast指针和slow指针,初始值为虚拟头结点
2.fast首先走n+1步,只有这样同时移动的时候slow才能指向删除节点的上一个节点(方便做删除操作)
3.fast和slow同时移动,直到fast指向末尾
4.删除slow指向的下一个节点
class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* dummyHead = new ListNode(0);dummyHead->next = head;ListNode* slow = dummyHead;ListNode* fast = dummyHead;while(n-- && fast != NULL) {fast = fast->next;}fast = fast->next; // fast再提前走一步,因为需要让slow指向删除节点的上一个节点while (fast != NULL) {fast = fast->next;slow = slow->next;}slow->next = slow->next->next; // ListNode *tmp = slow->next; C++释放内存的逻辑// slow->next = tmp->next;// delete tmp;return dummyHead->next;}
};