/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类
* @param n int整型
* @return ListNode类
*/
ListNode* removeNthFromEnd(ListNode* head, int n) {
// write code here
// write code here
if(head == NULL){
return NULL;
}
ListNode *p = head;
ListNode *q = head;
ListNode *pre = NULL;
while(n>0){
if(p!=NULL){
p = p->next;
}else{
return NULL;
}
n--;
}
if(p==NULL){
return head->next;
}
while(p != NULL){
p = p->next;
pre = q ;
q = q->next;
if(p ==NULL){
pre->next = q->next;
}
}
return head;
}
};
该题应用了快慢指针,当p指针到达队尾时q指针指的位置就是需要被删除的元素,在q指针向前前进时,用pre指针记录

京公网安备 11010502036488号