PAT1097 Deduplication on a Linked List
2015-11-24 21:51
246 查看
题目链接:
http://www.nowcoder.com/pat/5/problem/4321题目大意:
要求找出一个线性表中的结点数据绝对值重复的结点,仅保留第一个,其余的按地址连接的顺序去除,并且连接成另一个线性表。分析:
水题,用数组下标模拟地址。遍历去重时,利用set不能放重复元素的特性进行判断,如果不能插入结点数据,证明是重复的,模拟链表删除一个结点。代码:
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<stdio.h> #include<stdlib.h> #include<string.h> #include<set> using namespace std; struct Node { int _val; int _nextAdr; }; Node list[100005]; struct Mark { int _curAdr; int _val; int _nextAdr; }; Mark delNode[100005]; int main() { int staAdr; int n; set<int> s; scanf("%d%d",&staAdr,&n); int adr; while (n--) { scanf("%d",&adr); scanf("%d%d",&list[adr]._val,&list[adr]._nextAdr); } int curAdr = staAdr; int val; int size; int preAdr = 0; int cnt = 0; while (curAdr != -1) { val = list[curAdr]._val; val = val > 0 ? val : -val; size = s.size(); s.insert(val); if (size == s.size()) { list[preAdr]._nextAdr = list[curAdr]._nextAdr; delNode[cnt]._curAdr = curAdr; delNode[cnt]._val = list[curAdr]._val; delNode[cnt]._nextAdr = -1; if (cnt > 0) { delNode[cnt - 1]._nextAdr = curAdr; } cnt++; } else { preAdr = curAdr; } curAdr = list[curAdr]._nextAdr; } curAdr = staAdr; while (list[curAdr]._nextAdr != -1) { printf("%05d %d %05d\n", curAdr, list[curAdr]._val, list[curAdr]._nextAdr); curAdr = list[curAdr]._nextAdr; } //curAdr = list[curAdr]._nextAdr; printf("%05d %d -1\n", curAdr, list[curAdr]._val); for (int i = 0; i < cnt; i++) { printf("%05d %d",delNode[i]._curAdr,delNode[i]._val); if (delNode[i]._nextAdr == -1) { printf(" -1\n"); } else { printf(" %05d\n",delNode[i]._nextAdr); } } return 0; }
相关文章推荐
- java线性表排序示例分享
- php线性表的入栈与出栈实例分析
- C++语言实现线性表之数组实例
- C语言线性表的顺序表示与实现实例详解
- C++语言实现线性表之链表实例
- 简单介绍线性表以及如何实现双链表
- Go语言实现顺序存储的线性表实例
- 利用线性表的顺序结构求集合的并、交、差、补(C语言实现)
- libdvbpsi源码分析(四)PAT表解析/重建
- 结构之美:定义一个线性表
- 结构之美:线性表的查找、插入与删除操作
- 线性表的概念、结构与基本操作
- 结构之美:线性表的链式存储结构——链表
- 线性表的几个链式储存结构介绍
- PAT配置
- 什么是端口复用动态地址转换(PAT) 介绍配置实例
- MikroTik layer7-protocol
- PAT是如何工作的
- 数据结构_线性表
- 深入分析 Linux 内核链表