class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* dummy = new ListNode(0, head);
stack<ListNode*> stk;
// 创造一个虚拟头节点,这样一来,对原头节点的删除操作和其他节点一致
ListNode* curr = dummy;
while(curr) {
stk.push(curr);
curr = curr ->next;
}
// tmp是记录待删除的节点
ListNode* tmp = nullptr;
for(int i = 0; i < n; i++) {
tmp = stk.top();
stk.pop();
}
stk.top()->next = tmp->next;
delete tmp;
return dummy->next;
}
};