题目:题目链接
这题也是two points。hints中也有提示的,按照提示做就可以了。简单来说就是设置快慢指针,然后让快指针先走n个结点。如果快指针的下一个结点是空,那么慢指针的下一个结点就是要删除的结点了。其中要注意对于删除首结点的情况,直接删是不行的,因为没有返回,所以需要设一个头结点(是空的)来保证删除首结点和其他节点一样。体会一下,看代码:
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* root = new ListNode();//设一个空的头结点,方便删除第一个元素。
ListNode* slow = root;
ListNode* fast = root;
slow->next = head;
while (n--) fast = fast->next;//相距n
while (fast->next) {
fast = fast->next;
slow = slow->next;
}
slow->next = slow->next->next;//规范点是要释放删除结点的。
return root->next;//注意不是head,因为head可能被删除了。
}
};
加油吧!!