数据结构实验之链表七:单链表中重复元素的删除
来源:互联网 发布:汉字书写教学软件 编辑:程序博客网 时间:2024/06/14 16:07
数据结构实验之链表七:单链表中重复元素的删除
Time Limit: 1000MS Memory Limit: 65536KB
SubmitStatistic
Problem Description
按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入的一个)。
Input
第一行输入元素个数 n (1 <= n <= 15);
第二行输入 n 个整数,保证在 int 范围内。
Output
第一行输出初始链表元素个数;
第二行输出按照逆位序所建立的初始链表;
第三行输出删除重复元素后的单链表元素个数;
第四行输出删除重复元素后的单链表。
Example Input
1021 30 14 55 32 63 11 30 55 30
Example Output
1030 55 30 11 63 32 55 14 30 21730 55 11 63 32 14 21
Hint
Author
不得使用数组!
#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
struct node *next;
};
int n;//定义全局变量,方便。
struct node *creat(struct node *head,int n)
{
int i;
struct node *q;
for(i=0; i<n; i++)
{
q=(struct node *)malloc(sizeof(struct node ));
scanf("%d",&q->data);
q->next=head->next;
head->next=q;
}
return head;
};
void show(struct node *head)
{
struct node *q;
q=head->next;
while(q->next!=NULL)
{
printf("%d ",q->data);
q=q->next;
}
printf("%d\n",q->data);
}
struct node *dele(struct node *head)
{
struct node *q,*p,*d;
q=head->next;
p=q;
while(q->next!=NULL) ///1.到最后一个元素. 2.访问最后一个数后就直接跳出
{
while(p->next!=NULL) ///1.需要遍历整个链表时
{
if(p->next->data==q->data) ///q和p不再有删除的关系
{
d=p->next; /// 有删除的情况才记下d
p->next=d->next;
free(d);
n--;/// 直接用n--表示最后的数
}
else p=p->next;
}
if(q->next!=NULL)
{
q=q->next; ///访问下一个元素
p=q; ///p也跟着往后移
}
}
return head;
};
int main()
{
struct node *head;
head=(struct node *)malloc(sizeof(struct node ));
head->next=NULL;
scanf("%d",&n);
head=creat(head,n);
printf("%d\n",n);
show(head);
head=dele(head);
printf("%d\n",n);
show(head);
return 0;
}
#include <stdlib.h>
struct node
{
int data;
struct node *next;
};
int n;//定义全局变量,方便。
struct node *creat(struct node *head,int n)
{
int i;
struct node *q;
for(i=0; i<n; i++)
{
q=(struct node *)malloc(sizeof(struct node ));
scanf("%d",&q->data);
q->next=head->next;
head->next=q;
}
return head;
};
void show(struct node *head)
{
struct node *q;
q=head->next;
while(q->next!=NULL)
{
printf("%d ",q->data);
q=q->next;
}
printf("%d\n",q->data);
}
struct node *dele(struct node *head)
{
struct node *q,*p,*d;
q=head->next;
p=q;
while(q->next!=NULL) ///1.到最后一个元素. 2.访问最后一个数后就直接跳出
{
while(p->next!=NULL) ///1.需要遍历整个链表时
{
if(p->next->data==q->data) ///q和p不再有删除的关系
{
d=p->next; /// 有删除的情况才记下d
p->next=d->next;
free(d);
n--;/// 直接用n--表示最后的数
}
else p=p->next;
}
if(q->next!=NULL)
{
q=q->next; ///访问下一个元素
p=q; ///p也跟着往后移
}
}
return head;
};
int main()
{
struct node *head;
head=(struct node *)malloc(sizeof(struct node ));
head->next=NULL;
scanf("%d",&n);
head=creat(head,n);
printf("%d\n",n);
show(head);
head=dele(head);
printf("%d\n",n);
show(head);
return 0;
}
0 0
- 数据结构实验之链表七:单链表中重复元素的删除
- 数据结构实验之链表七:单链表中重复元素的删除
- 数据结构实验之链表七:单链表中重复元素的删除
- 数据结构实验之链表七:单链表中重复元素的删除
- 数据结构实验之链表七:单链表中重复元素的删除
- 数据结构实验之链表七:单链表中重复元素的删除
- 数据结构实验之链表七:单链表中重复元素的删除
- 数据结构实验之链表七:单链表中重复元素的删除
- 数据结构实验之链表七:单链表中重复元素的删除
- 数据结构实验之链表七:单链表中重复元素的删除
- 数据结构实验之链表七:单链表中重复元素的删除
- SDUToj2122数据结构实验之链表七:单链表中重复元素的删除
- 数据结构实验之链表七:单链表中重复元素的删除
- 数据结构实验之链表七:单链表中重复元素的删除
- 数据结构实验之链表七:单链表中重复元素的删除
- 数据结构实验之链表七:单链表中重复元素的删除
- 数据结构实验之链表七:单链表中重复元素的删除
- 数据结构实验之链表七:单链表中重复元素的删除
- JavaSE学习路径
- Codeforces Round #396 (Div. 2) E. Mahmoud and a xor trip(树形dp+二进制按位拆分)
- AFNetworking2.0和AFNetworking3.0 的HTTPS的配置
- 三极管之——PNP与NPN
- Linux——touch命令
- 数据结构实验之链表七:单链表中重复元素的删除
- 对于中文的Cookie
- Android Binder系统的理解。
- Codeforces Round #398 (Div. 2) A.Snacktower B.The Queue C.Garland D.Cartons of milk E.Change-fr
- LeetCode 131. Palindrome Partitioning
- sql语句优化大全
- 欢迎使用CSDN-markdown编辑器
- [leetcode]504. Base 7
- node.js not linked error