c语言,删除链表中指定值的节点
typedefstructelement{intvaleur;structelement*lien;}Element;typedefElement*Liste;Liste...
typedef struct element { int valeur; struct element *lien; } Element;typedef Element *Liste;
Liste delister (Liste liste, int v){ Liste tmp1=liste,tmp=NULL; int flag=0; while( tmp1 != NULL ){ if(tmp1->valeur == v){ tmp2=tmp1; tmp1=tmp1->lien; free(tmp2); tmp2=NULL; flag=1; } else tmp1=tmp1->lien; } if(!flag) printf("v isn't in the list"); return liste;}
这个函数哪里不对呢?为什么删除后对应的链表显示值为其他的值~
Liste delister (Liste liste, int v){ Liste tmp1=liste,tmp2=NULL; int flag=0; while( tmp1 != NULL ){ if(tmp1->valeur == v){ tmp2=tmp1; tmp1=tmp1->lien; free(tmp2); tmp2=NULL; flag=1; } else tmp1=tmp1->lien; } if(!flag) printf("v isn't in the list"); return liste;} 展开
Liste delister (Liste liste, int v){ Liste tmp1=liste,tmp=NULL; int flag=0; while( tmp1 != NULL ){ if(tmp1->valeur == v){ tmp2=tmp1; tmp1=tmp1->lien; free(tmp2); tmp2=NULL; flag=1; } else tmp1=tmp1->lien; } if(!flag) printf("v isn't in the list"); return liste;}
这个函数哪里不对呢?为什么删除后对应的链表显示值为其他的值~
Liste delister (Liste liste, int v){ Liste tmp1=liste,tmp2=NULL; int flag=0; while( tmp1 != NULL ){ if(tmp1->valeur == v){ tmp2=tmp1; tmp1=tmp1->lien; free(tmp2); tmp2=NULL; flag=1; } else tmp1=tmp1->lien; } if(!flag) printf("v isn't in the list"); return liste;} 展开
展开全部
删除链表中的一个结点,要把前一个结点和后一个结点连起来,你光删除没有连起来。
Liste delister (Liste liste, int v)
{ Liste tmp1=liste,tmp2=NULL;
int flag=0;
tmp2=tmp1;
while( tmp1 != NULL )
{
if(tmp1->valeur == v)
{ if(tmp2!= tmp1)
tmp2->lien=tmp1->lien; /*头结点可直接删除,中间结点删除前要先连接前后的结点*/
free(tmp1);
tmp1=tmp2->lien;
flag=1;
}
else
{ tmp2=tmp1; //记录前一个结点
tmp1=tmp2->lien;
}
}
if(!flag)
printf("v isn't in the list");
return liste;
}
Liste delister (Liste liste, int v)
{ Liste tmp1=liste,tmp2=NULL;
int flag=0;
tmp2=tmp1;
while( tmp1 != NULL )
{
if(tmp1->valeur == v)
{ if(tmp2!= tmp1)
tmp2->lien=tmp1->lien; /*头结点可直接删除,中间结点删除前要先连接前后的结点*/
free(tmp1);
tmp1=tmp2->lien;
flag=1;
}
else
{ tmp2=tmp1; //记录前一个结点
tmp1=tmp2->lien;
}
}
if(!flag)
printf("v isn't in the list");
return liste;
}
更多追问追答
追问
为什么删除头结点后~链表的头结点的值变成0,但并没有正真删除呢?
追答
删除头结点的话,free(tmp1)太早了,free之前先记下后一结点
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
引用琴风夜扬的回答:
删除链表中的一个结点,要把前一个结点和后一个结点连起来,你光删除没有连起来。
Liste delister (Liste liste, int v)
{ Liste tmp1=liste,tmp2=NULL;
int flag=0;
tmp2=tmp1;
while( tmp1 != NULL )
{
if(tmp1->valeur == v)
{ if(tmp2!= tmp1)
tmp2->lien=tmp1->lien; /*头结点可直接删除,中间结点删除前要先连接前后的结点*/
free(tmp1);
tmp1=tmp2->lien;
flag=1;
}
else
{ tmp2=tmp1; //记录前一个结点
tmp1=tmp2->lien;
}
}
if(!flag)
printf("v isn't in the list");
return liste;
}
删除链表中的一个结点,要把前一个结点和后一个结点连起来,你光删除没有连起来。
Liste delister (Liste liste, int v)
{ Liste tmp1=liste,tmp2=NULL;
int flag=0;
tmp2=tmp1;
while( tmp1 != NULL )
{
if(tmp1->valeur == v)
{ if(tmp2!= tmp1)
tmp2->lien=tmp1->lien; /*头结点可直接删除,中间结点删除前要先连接前后的结点*/
free(tmp1);
tmp1=tmp2->lien;
flag=1;
}
else
{ tmp2=tmp1; //记录前一个结点
tmp1=tmp2->lien;
}
}
if(!flag)
printf("v isn't in the list");
return liste;
}
展开全部
垃圾
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
格式真别扭啊,能不能搞清楚点
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询