单链表中元素的删除
下面代码是要删除A表中B,C表都有的的元素,即a∈A∩B∩C,不过写挫了,搞了一上午没搞出来,求高手不吝赐教!
说明:表中元素递增存储。
- C/C++ code
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;}
[解决办法]
链表也是我的弱项 一起学习学些
[解决办法]
代码就不写了 非常容易的 写个思路(比较笨)
定义个函数如: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