方法:在链表前添加一个头结点,这个头结点没有有效信息,只是为了方便跟踪删除节点的前一个节点。
然后使用双指针p和q,再加上一个pre指针,q指针先移动到顺数第n个位置,然后三个指针一起移动,p指针指向的元素就是要删除的元素,删除操作要用到pre指针
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode *L = new ListNode(0);
L->next = head;
ListNode *p = head, *q = head;
ListNode *pre = L;
while (--n)
q = q->next;
while (q->next != NULL){
pre = pre->next;
p = p->next;
q = q->next;
}
pre->next = p->next;
delete(p);
return L->next;
}
};