删除单链表中重复的值
来源:互联网 发布:天天p图软件 编辑:程序博客网 时间:2024/06/08 02:54
题目:删除带头结点的单链表中重复值的元素(即让每种值的元素只有一个)
解题思路:
解题思路:
用一个动态辅助存储数组,每次要向辅助数组中放入元素时,让辅助数组的长度加1,最长时与单链表一样长,设一个指针p,让它指向头结点,从单链表中第一个元素开始,将它的值放入辅助数组中,然后依次访问单链表后面的元素,用该元素的值与数组中所有已经被赋值的元素的值进行比较,如果不等于数组中任何元素的值,那么让p的next指向该结点的next指针,删除该结点元素,否则令p指向p的next指针,并将当前访问的节点元素的值依次放入辅助数组,一直访问到单链表中的最后一个元素。
ADT定义如下
#define ElemType int
typedef struct LNode{
ElemType data;
LNode *next;
}LNode,*LinkList;
算法实现:
void deleteRepeatValue(LinkList &L){//如果单链表为空,或者只有头结点,或者头结点后面只有一个元素时,不可能存在值重复的元素if(L==NULL||L->next==NULL||L->next->next==NULL) return;LNode* p=L;//当前访问结点的前一个结点LNode* q=L->next;//当前访问的结点int count=1;ElemType* temp=(ElemType*)malloc(sizeof(ElemType)*count);temp[count-1]=q->data;while(q->next)//一直往下访问,直到访问单链表中的最后一个结点{q=q->next;//访问下一个结点bool flag=false;//用来标记当前访问结点元素中的值是否与之前访问结点元素的值相同for(int i=0;i<count;i++){if(q->data==temp[i]){p->next=q->next;free(q);flag=true;break;}}if(!flag){count++;temp=(ElemType*)realloc(temp,sizeof(ElemType)*count);temp[count-1]=q->data;q=q->next;//让q往下走一步,保证p是下个访问结点的前一个结点}}q=NULL;//此时q可能是已经释放了的指针,如果不令它指向NULL,它会变成野指针}
1 0
- 删除单链表中重复的值
- 删除单链表中重复的值
- 单链表中删除重复值
- 单链表中删除重复值
- 删除单链表中重复的元素
- 删除单链表中重复的元素
- 删除单链表中重复的元素
- 删除单链表中重复的元素
- 单链表中重复元素的删除
- 单链表中重复元素的删除
- 单链表中重复元素的删除
- 单链表中重复元素的删除
- 单链表中重复元素的删除
- 单链表中重复元素的删除
- 单链表中重复元素的删除
- 删除链表中重复的值
- 删除单链表中重复的值(Java版)
- 13.删除单链表中重复的元素
- Android startActivityForResult的使用
- scrollView 与 Autolayout
- IOS开发优秀资源
- 第五章 BIRT文本类报表
- 常见的负载均衡的基本算法
- 删除单链表中重复的值
- webservice的几种验证方式(一)基于JAX-WS
- 右值引用,移动语义,完美转发
- Spark:一个高效的分布式计算系统
- 织梦DEDECMS网站搬家教程 数据库备份和还原教程
- Ubuntu14.04(64位) 安装ia32-libs
- 第六章 BIRT普通网格报表
- Linux——SSH 登录失败:Host key verification failed 的处理方法
- CSDN学院精品课程推荐