一轮遍历,把指向每个结点的指针存到vector<ListNode *> point;
遍历完,就知道倒数第n个结点 所对应的相关指针
在容器中找到涉及到的两个指针,赋值一次并且delete 即可
注意:如果删除的倒数第n个结点正好是第一个,需要单独处理
代码:
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode *p = head;
vector<ListNode *> point;
while (p)
{
point.push_back(p);
p = p->next;
}
if(point.size() == 1)
return NULL;
if (point.size() == n)
head = point[point.size() - n]->next;
else point[point.size() - n - 1]->next = point[point.size() - n]->next;
delete point[point.size() - n];
return head;
}
};