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

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

进阶:你能尝试使用一趟扫描实现吗?

 

示例 1:

输入:head = [1,2,3,4,5], n = 2
输出:
[1,2,3,5]

示例 2:

输入:head = [1], n = 1
输出:
[]

示例 3:

输入:head = [1,2], n = 1
输出:
[1]

 

提示:

以下程序实现了这一功能,请你填补空白处内容: ```cpp struct ListNode { int val; ListNode *next; ListNode() : val(0), next(nullptr) {} ListNode(int x) : val(x), next(nullptr) {} ListNode(int x, ListNode *next) : val(x), next(next) {} }; #include class Solution { public: ListNode *removeNthFromEnd(ListNode *head, int n) { ListNode empty_node(0, head); ListNode *p = &empty_node; std::vector pv; while (p != nullptr) { pv.push_back(p); p = p->next; } _________________; p->next = p->next->next; return empty_node.next; } }; ``` ## template ```cpp struct ListNode { int val; ListNode *next; ListNode() : val(0), next(nullptr) {} ListNode(int x) : val(x), next(nullptr) {} ListNode(int x, ListNode *next) : val(x), next(next) {} }; #include class Solution { public: ListNode *removeNthFromEnd(ListNode *head, int n) { ListNode empty_node(0, head); ListNode *p = &empty_node; std::vector pv; while (p != nullptr) { pv.push_back(p); p = p->next; } p = pv[pv.size() - 1 - n]; p->next = p->next->next; return empty_node.next; } }; ``` ## 答案 ```cpp p = pv[pv.size() - 1 - n]; ``` ## 选项 ### A ```cpp p = pv[pv.size() + 1 - n]; ``` ### B ```cpp p = pv[pv.size() - 1 + n]; ``` ### C ```cpp p = pv[pv.size() + 1 + n]; ```