您的位置:首页 > 理论基础 > 数据结构算法

数据结构实验之链表七:单链表中重复元素的删除

2018-01-20 17:04 274 查看


数据结构实验之链表七:单链表中重复元素的删除

Time Limit: 1000MS Memory Limit: 65536KB

Submit Statistic


Problem Description

按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入的一个)。


Input

第一行输入元素个数 n (1 <= n <= 15);

第二行输入 n 个整数,保证在 int 范围内。


Output

第一行输出初始链表元素个数;

第二行输出按照逆位序所建立的初始链表;

第三行输出删除重复元素后的单链表元素个数;

第四行输出删除重复元素后的单链表。


Example Input

10
21 30 14 55 32 63 11 30 55 30



Example Output

10
30 55 30 11 63 32 55 14 30 21
7
30 55 11 63 32 14 21


01
#include
<stdio.h>
02
#include
<stdlib.h>
03
struct
node
04
{
05
int
data;
06
struct
node
*next;
07
};
08
int
main()
09
{
10
int
n,
i,count;
11
struct
node
*p, *tail, *head, *q;
12
head
= (
struct
node
*)
malloc
(
sizeof
(
struct
node));
13
head->next
= NULL;
14
scanf
(
"%d"
,
&n);
15
tail
= head;
16
for
(i
= 0;i<n;i++)
17
{
18
p
= (
struct
node
*)
malloc
(
sizeof
(
struct
node));
19
scanf
(
"%d"
,
&p->data);
20
p->next
= tail->next;
21
tail->next
= p;
22
}
23
printf
(
"%d\n"
,
n);q = head->next;
24
while
(q->next!=NULL)
25
{
26
printf
(
"%d
"
,
q->data);
27
q
= q->next;
28
}
29
printf
(
"%d\n"
,
q->data);
30
tail
= head->next;
31
count
= 0;
32
while
(tail!=NULL)
33
{
34
q
= tail;p = tail->next;
35
while
(p!=NULL)
36
{
37
if
(p->data==tail->data)
38
{
39
p
= q->next;
40
q->next
= p->next;
41
free
(p);
42
p
= q->next;
43
count++;
44
}
45
else
46
{
47
q
= q->next;p = q->next;
48
}
49
}
50
tail
= tail->next;
51
}
52
printf
(
"%d\n"
,
n-count);
53
tail
= head->next;
54
while
(tail->next!=NULL)
55
{
56
printf
(
"%d
"
,
tail->data);
57
tail
=tail->next;
58
}
59
printf
(
"%d\n"
,
tail->data);
60
return
0;
61
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: