- 思路
一开始想大概要循环个两遍就OK了,看到题目中有进阶提示用一遍循环就可以搞定,于是想到双重指针,写起来还是非常快的,就是大概有几种不能通过基本循环搞定的要单独拎出来 - 错误
没考虑到只删除最后一个的特殊情况,还有N+1等于所有元素个数的情况也不满足我的循环条件,不过修改想一下就出来啦 - 这里一定要贴出我写的最好的一次哇咔咔![在这里插入图片描述
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeNthFromEnd(struct ListNode* head, int n){
struct ListNode *fast = head;
struct ListNode *pre = head;
struct ListNode *slow = head;
if(head->next == NULL && n==1)
return NULL;
if(n==1){
while(fast->next->next != NULL){
fast = fast->next;
}
fast->next = NULL;
return head;
}
for(int i=0; i<n+1; i++){
if(fast == NULL){
head = head->next;
return head;
}
fast = fast->next;
}
while(fast != NULL){
pre = pre->next;
fast = fast->next;
}
slow = pre->next;
pre->next = slow->next;
free(slow);
return head;
}