/** * 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指针记录