热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

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


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

代码:

#include <stdio.h>
#include <stdlib.h>
typedef struct list
{
int data;
struct list* next;
}LIST;
int main()
{
LIST *L=(LIST *)malloc(sizeof(LIST));
LIST *p,*q,*pre,*s;
L->next=NULL;
int n,t;
scanf("%d",&n);
t=n;
while(n--)//逆位序建立初始链表,即将s插在头指针后面
{
s=(LIST *)malloc(sizeof(LIST));
scanf("%d",&s->data);
s->next=L->next;
L->next=s;
}
printf("%d\n",t);
p=L->next;
while(p)
{
if(p->next==NULL)
printf("%d",p->data);
else
printf("%d ",p->data);
p=p->next;
}
printf("\n");
p=L->next;
while(p)
{
pre=p;//pre代表q的前驱节点,因为涉及到删除操作,所以必须重新设定前驱结点的指针域
q=p->next;
while(q)
{
if(p->data==q->data)//删除q的指向
{
pre->next=q->next;
free(q);//释放掉此时q所指向的内存
q=pre->next;
t--;
}else{
pre=q;//下移
q=q->next;
}
}
p=p->next;
}
printf("%d\n",t);
p=L->next;
while(p)
{
if(p->next==NULL)
printf("%d",p->data);
else
printf("%d ",p->data);
p=p->next;
}
return 0;
}

/***************************************************
Result: Accepted
Take time: 0ms
Take Memory: 192KB
Submit time: 2017-07-23 12:39:52
****************************************************/


推荐阅读
author-avatar
康博洋2602899791
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有