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

Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description

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

Input

第一行输入元素个数 n (1 <= n <= 15);
第二行输入 n 个整数,保证在 int 范围内。

Output

第一行输出初始链表元素个数;
第二行输出按照逆位序所建立的初始链表;
第三行输出删除重复元素后的单链表元素个数;
第四行输出删除重复元素后的单链表。

Sample Input

10
21 30 14 55 32 63 11 30 55 30

Sample 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> struct node
{
int data;
struct node *next;
}; int main()
{
struct node *head, *p, *q, *r;
head = (struct node *)malloc(sizeof(struct node));
head->next = NULL;
int n,i;
scanf("%d",&n);
for(i=0; i<n; i++){
p = (struct node *)malloc(sizeof(struct node));
scanf("%d",&p->data);
p->next = head->next;
head->next = p;
} printf("%d\n",n);
p = head->next;
while(p->next)
{
printf("%d ",p->data);
p = p->next;
} printf("%d\n",p->data); p = head->next;//要删除的节点是q,它的前一个用r表示;
while(p){
r = p;
q = r->next;
while(q){
if(p->data==q->data){
r->next = q->next;
free(q);
n--;
q = r->next;
}
else{
r = r->next;
q = r->next;
}
//printf("*\n");
}
p = p->next;
//printf("#\n");
} printf("%d\n",n);
p = head->next;
while(p->next){
printf("%d ",p->data);
p = p->next;
} printf("%d\n",p->data); return 0;
}

最新文章

  1. 解决bootstrap模态框内输入框无法获取焦点
  2. linux 64位调用
  3. Docker Compose to CoreOS
  4. 记一次动画的优化--requestAnimationFrame、webp
  5. Android Studio Check for Update
  6. c语言构建动态数组
  7. 安卓MonkeyRunner源码分析之启动
  8. jQuery Easy UI LinkButton(button)包
  9. java系列--I/O流
  10. Nginx+Django-Python+BPMN-JS的整合工作流实战项目
  11. charles抓包https设置
  12. Django11-ModelForm
  13. BZOJ3160 万径人踪灭(FFT+manacher)
  14. 利用ansible-playbook从测试环境获取tomcat中java项目新版本发布到生产环境
  15. 796. Rotate String
  16. Json.NET如何避免循环引用
  17. nc用法【转】
  18. react-router的browserHistory/react-router-dom的BrowserRouter刷新页面404问题解决
  19. FormWindowState.Maximized的陷阱
  20. Beta分布(转)

热门文章

  1. Mybatis工具Generator
  2. EasyGui
  3. C# XML文件操作
  4. [ShaderStaff] Sprite Outline外轮廓效果
  5. 如何解决quartz在集群下出现的资源抢夺现象
  6. 性能监控工具YourKit
  7. MongoDB简介及基础知识
  8. Tarjan的强连通分量算法
  9. 解决nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
  10. The &#39;Microsoft Jet OLEDB 4.0 Provider&#39; is not registered on the local machine