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

本文介绍了一种按逆位序建立单链表的方法,并实现删除链表中重复元素的功能,保留每个值最后一次出现的节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值