单链表中结点的删除
单链表中结点的删除
核心部分
如何删除一个单链表中的结点,在我们掌握了单链表的基本知识之后还是比较容易实现的。我们只要目标结点的前驱结点,将前驱结点的指针指向目标结点的后继结点,然后释放目标结点所占的空间。代码如下(假设前驱结点为q,目标结点为p):
q->next=p->next; //将q的指针指向p的后继,删除p结点
free(p); //释放p结点所占的空间
在带表头结点的单链表中删除元素值为e的结点
int Delete(Linklist head,ElemType e){
struct node*q,*p;
q=head; p=head->next; //q,p扫描,遍历单链表查找元素e
while(p&&p->data!=e){ //查找元素为e的结点
q=p; p=p->next; //q和p向后移一位
}
if(p){ //p不为空表且存在元素为e的结点
q->next=p->next; //删除p结点
free(p); //释放p结点所占的空间
return YES; //删除成功
}
else
return NO; //没有删除结点,删除失败
}
删除指定位置i的元素
int Delete(Linklist &L,int i,ElemType &e){
p=L;
j=1;
while(p->next&&j<i){ //循环遍历单链表,直到第i-1位置结束循环,p不可能为空
p=p->next; //p后移,指向下一个位置
j++;
}
if(j<1||j->next==NULL){ //删除点错误
return ERROR;
}
q=p->next; //q指向删除结点
p->next=q->next; //删除q结点
e=q->data; //如果有需要,取走数据元素值
free(q); //释放结点空间
return YES;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)