单链表中元素的删除

jakzon_245 2012-09-23 10:45:09
下面代码是要删除A表中B,C表都有的的元素,即a∈A∩B∩C,不过写挫了,搞了一上午没搞出来,求高手不吝赐教!
说明:表中元素递增存储。


bool est(NODE *a,NODE *&b){
bool i=false;
while(b&&(a->dat>=b->dat)){
if(a->dat==b->dat)i=true;
b=b->next;
}
return i;
}

bool del_com(NODE *pa,NODE *pb,NODE *pc){//删除成功返回1,否则返回0
int c=pa->dat,t;//c is used to count the number of elements in the list
NODE *p=NULL,*ha=pa,*pre=pa;//pre用于记下A表当前元素位置,以维护链表
pa=pa->next;
pb=pb->next;
pc=pc->next;//skip the head node
while(pa){
if(est(pa,pb)&&est(pa,pc)){//delete
t=pa->dat;
while(pa&&(pa->dat==t)){
p=pa;
pa=pa->next;
free(p);
}
pre->next=pa;//重连、结束表
}
else pa=pa->next;//判断下一个
pre=pa;//更新A表当前元素位置
}
ha->dat=c;
if(p)return true;//即未删除元素
return false;
}
...全文
202 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jakzon_245 2012-09-26
  • 打赏
  • 举报
回复
感谢两位,不过只要将else那块加个括号就好了……
代码如下:

bool del_com(NODE *pa,NODE *pb,NODE *pc){//删除成功返回1,否则返回0
int c=pa->dat,t;//c is used to count the number of elements in the list
NODE *p=NULL,*ha=pa,*pre=pa;//pre用于记下A表当前元素位置,以维护链表
pa=pa->next;
pb=pb->next;
pc=pc->next;//skip the head node
while(pa){
if(est(pa,pb)&&est(pa,pc)){//delete
t=pa->dat;
while(pa&&(pa->dat==t)){
p=pa;
pa=pa->next;
free(p);
}
pre->next=pa;//重连、结束表
}
else{
pa=pa->next;//判断下一个
pre=pa;//更新A表当前元素位置
}
}
ha->dat=c;
if(p)return true;//即未删除元素
return false;
}


leon_罗 2012-09-25
  • 打赏
  • 举报
回复
代码就不写了 非常容易的 写个思路(比较笨)
定义个函数如:void 函数名(链表 a,链表 b)
if(a)//判读a的合法性
while(b)//b不为空
{
链表指针 temp = a;
用temp遍历a中的元素 while(temp)
{if(temp->data == b->data) 删除temp指向的节点 break;
else temp = temp->next;}
b = b->next();
}
再在main中分别调用 函数(a,b) 函数(a,c)


如果还不会的话 就留邮箱吧 发到我的QQ944894913
xiaoyuyhy 2012-09-23
  • 打赏
  • 举报
回复
链表也是我的弱项 一起学习学些

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧