这是数据结构中的一个问题:写一个算法将单链表中重复的结点删除,使所得的结果表中各结点值均不相同。

[复制链接]
查看11 | 回复1 | 2007-10-11 21:37:47 | 显示全部楼层 |阅读模式
做个循环,用这个接点和它后面的每个接点比较,有相等的就把这个接点删除,然后下一个,循环一遍就行了~程序就自己写了
回复

使用道具 举报

千问 | 2007-10-11 21:37:47 | 显示全部楼层
#include #include struct nlist{ int *list; int size; int maxsize;};//初始化void initlist(nlist &l){ l.maxsize=20; l.list=new int[l.maxsize]; l.size=0;}//清空void clearlist(nlist &l){ if(l.list!=NULL) {delete []l.list;l.list=NULL; } l.maxsize=0; l.size=0;}//插入bool insertlist(nlist &l,int x,int pos){ int i; if(pos=pos-1;j--)l.list[j+1]=l.list[j]; l.list[pos-1]=x; l.size++; return true;}//遍历线性表void traverlist(nlist &l){ for (int i=0;i<l.size;i++)cout<<l.list<<""; cout<<endl;}//删除bool deletelist(nlist &l,int &x,int pos){ if(pos<-1) return false; if(pos==0){for(int i=0;i<l.size;i++) if(x==l.list) break;pos=i+1; } else if(pos==-1)pos=l.size; x=l.list[pos-1]; for(int j=pos;j<l.size;j++)l.list[j-1]=l.list[j]; l.size--; return true;}//删除重复void ReDelete(nlist &l){ int x; for(int i=0;i<l.size;i++){x=l.list;for(int j=i+1;j<l.size;j++){ if(x==l.list[j])
deletelist(l,x,0);} }}//主函数void main(){ int a[9]={7,22,7,10,7,88,88,5,10}; int i; int x; nlist t; initlist(t);for(i=0;i<9;i++)insertlist(t,a,i+1); //i+1 表示插入位置
//1 表示插入第一位,则表为反序
//0 则有序(由小到大)排序 traverlist(t); ReDelete(t);//删除重复 cout<<"删除重复结点后:"<<endl; traverlist(t); clearlist(t);}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行