单链表中元素的删除
下面代码是要删除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;}