删除链表的倒数第 N 个结点(c语言)
思路很简单,就直接贴代码了,有注释的
struct ListNode* removeNthFromEnd(struct ListNode* head, int n){ struct ListNode *a=head;//创建两个指针,方便删除操作 struct ListNode *b=head; if(head==NULL)//为空直接返回 { return head; } int cnt=0; while(a!=NULL)//判断节点个数 { cnt++; a=a->next; } int t=cnt-n+1;//正序的需要删除的节点 if(t==1&&cnt==0)//只有一个节点,重置为空,再返回 { head=NULL; return head; } if(t==1&&cnt!=0)//删除的为头节点,但不止一个节点 { head=head->next; return head; } for(int i=1;i<t;i++)//找到需要删除的节点和它的上一级节点 { a=b; b=b->next; } a->next=b->next;//让需删除的上一级的节点指向被删除的下一个节点 free(b);//释放删除 return head;//返回头节点 }
删除链表的倒数第 N 个结点(c语言)
最新推荐文章于 2024-04-24 15:31:53 发布