再做一次!
注意fast的位置。
#include<iostream>
using namespace std;
class Soluation {
public:
struct ListNode
{
int val;
ListNode* next;
ListNode() :val(0), next(nullptr) {}
ListNode(int val) : val(val), next(nullptr) {}
ListNode(int val, ListNode* next) :val(val), next(next) {}
};
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* dummyHead = new ListNode(0);
dummyHead->next = head;
ListNode* fast = dummyHead;
ListNode* slow = dummyHead;
n++;// 让fast指针多走一步,避免当n大于链表长度时,空指针指向空指针。
while (n-- && fast!= NULL) {
fast = fast->next;
}
while (fast != NULL) {
slow = slow->next;
fast = fast->next;
}
ListNode* tmp = slow->next;
slow->next = slow->next->next;
delete tmp;// 释放空间
tmp = nullptr;
return dummyHead->next;
}
};