class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
if (head == nullptr) return nullptr; // 如果链表为空,直接返回nullptr
ListNode* a = new ListNode(); // 创建一个新的辅助节点a
ListNode* b = a; // 创建另一个指针b,指向a
ListNode* c = a; // 创建另一个指针c,也指向a
a->next = head; // 将a的下一个节点设置为头节点
b->next = head; // 将b的下一个节点设置为头节点
// 将指针a向前移动n个节点
while (n--) {
a = a->next;
}
// 移动指针a和b,直到a到达链表末尾
while (a->next != nullptr) {
a = a->next;
b = b->next;
}
// 删除倒数第n个节点
if (b->next != nullptr) {
ListNode* t = b->next; // 指向需要删除的节点
b->next = t->next; // 将b的下一个节点设置为t的下一个节点
delete t; // 删除t节点
}
ListNode* re = c->next; // 获取修改后链表的头节点
delete c; // 删除辅助节点c
return re; // 返回新链表的头节点
}
};