有思路就一遍过了。
采用双指针的方法,先让q指针向前走n个节点,然后在让p指针和q指针同时向前移动,知道q指针指向NULL,此时p指针所指的节点就是我们要删除的倒数第n个节点了。
struct ListNode* removeNthFromEnd(struct ListNode* head, int n){
struct ListNode *p=head,*q=head,*r=head;
for(int i=0;i<n;i++) q = q->next;
if(q == NULL){
head = head->next;
}
else{
while(q != NULL){
r = p;
p = p->next;
q = q->next;
}
r->next = p->next;
}
free(p);
return head;
}