19. 删除链表的倒数第 N 个结点

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; // 返回新链表的头节点 } };