删除单链表中重复的值
来源:互联网 发布:口袋打印机 知乎 编辑:程序博客网 时间:2024/06/03 07:22
题目:删除带头结点的单链表中重复值的元素(即让每种值的元素只有一个)
解题思路:
解题思路:
用一个动态辅助存储数组,每次要向辅助数组中放入元素时,让辅助数组的长度加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是下个访问结点的前一个结点
- }
- }
0 0
- 删除单链表中重复的值
- 删除单链表中重复的值
- 单链表中删除重复值
- 单链表中删除重复值
- 删除单链表中重复的元素
- 删除单链表中重复的元素
- 删除单链表中重复的元素
- 删除单链表中重复的元素
- 单链表中重复元素的删除
- 单链表中重复元素的删除
- 单链表中重复元素的删除
- 单链表中重复元素的删除
- 单链表中重复元素的删除
- 单链表中重复元素的删除
- 单链表中重复元素的删除
- 删除链表中重复的值
- 删除单链表中重复的值(Java版)
- 13.删除单链表中重复的元素
- 单链表是否有环
- Eclipse remote debug for maven
- 开机解屛和锁屏不起作用
- Codeforces Round #227 (Div. 2)---E. George and Cards(贪心, 树状数组+set维护, 好题!)
- 单链表是否相交
- 删除单链表中重复的值
- 比较排序算法的Java实现
- 黑马程序员-java中的类型转换
- Android数据存储技术
- 删除单链表某个结点
- Docker学习笔记 — Weave实现跨主机容器互联
- Best Time to Buy and Sell Stock III -- LeetCode
- 输出单链表中倒数第k个结点
- C++ 调用WINDOWS图片和传真查看器打开图片