首页 新闻 会员 周边 捐助

数据结构单链表的删除操作

0
[已解决问题] 解决于 2016-10-08 15:53

while((p->data<data)&&(p->next!=NULL))
{
ptr=p;
p=p->next;
i++;
}
if(p->data==data)
{
if(p==L)
{
L=L->next;
free(p);
}
else
{
ptr->next=p->next;
free(p);
}
printf("删除成功,你所找到的是%d个节点\n",i);
}
else
{
printf("未能找到节点\n");
}

 

谁能帮我解决一下 ??

1,if(p==L)是什么意思?

2 ,L=L->next ???

3,后面引入ptr是为什么??

野草1230的主页 野草1230 | 菜鸟二级 | 园豆:204
提问于:2016-09-29 16:48
< >
分享
最佳答案
0

1,if(p==L)表示删除的单链表的表头

2 ,L=L->next :表示将单链表的表头删除之后,重置链表指针

3,后面引入ptr:p是ptr的下一个链表成员的指针,将成员删除使,为了确保链表不中断,必须将ptr->指向p->next,然后将p指向的元素删除

奖励园豆:5
悦光阴 | 老鸟四级 |园豆:2251 | 2016-09-29 18:52

 补充一下,做单链表的题,必须考虑三个成员:previous,current,next

悦光阴 | 园豆:2251 (老鸟四级) | 2016-09-29 18:54
其他回答(1)
0

代码贴全一点

wz_software | 园豆:170 (初学一级) | 2016-09-29 16:55

void DeleteList(LinkList L,int data)
{
int i=0;
Node *s,*p,*ptr;
s=(Node *)malloc(sizeof(Node));
p=L;
s->data=data;
if(L==NULL)
{
printf("线性表为空\n");
return ;
}
while((p->data<data)&&(p->next!=NULL))
{
ptr=p;
p=p->next;
i++;
}
if(p->data==data)
{
if(p==L)
{
L=L->next;
free(p);
}
else
{
ptr->next=p->next;
free(p);
}
printf("删除成功,你所找到的是%d个节点\n",i);
}
else
{
printf("未能找到节点\n");
}

}

 

不好意思   

支持(0) 反对(0) 野草1230 | 园豆:204 (菜鸟二级) | 2016-09-29 17:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册