团体程序设计天梯赛-练习集 - L2-002 链表去重(25 分)

简介: 团体程序设计天梯赛-练习集 - L2-002 链表去重(25 分)

题目链接:点击打开链接

题目大意:

解题思路:


1、经过上次的“反转链表”的教训,千万记住别修复它们的 Next 地址,没必要的。只要抓住这一点,题目就简单了。

2、题目这句话:“只有键值或其绝对值等于K”意思表达不完全,其实是这个意思:“只有键值或其绝对值等于【绝对值的K】”。

3、删除重复链表的数据要注意可能都没重复的情况,所以第二组数据要不要输出需要判断下是否有重复的数据。


AC 代码


/

#include<bits/stdc++.h>
#include<cmath>
#define mem(a,b) memset(a,b,sizeof a);
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
int da[maxn], nx[maxn], vis[maxn], rs1[maxn], rs2[maxn];
int main()
{
    int s,n,t;
    while(~scanf("%d%d",&s,&n))
    {
        mem(vis,0);
        for(int i=0;i<n;i++){ scanf("%d",&t); scanf("%d%d",&da[t],&nx[t]); }
        int len1,len2; len1=len2=0;
        while(s!=-1)
        {
            if(!vis[abs(da[s])]) vis[abs(da[s])]=1, rs1[len1++]=s;
            else rs2[len2++]=s;
            s=nx[s];
        }
        for(int i=0;i<len1-1;i++)
        {
            s=rs1[i];
            printf("%05d %d %05d\n",s,da[s],rs1[i+1]);
        }
        printf("%05d %d -1\n",rs1[len1-1],da[rs1[len1-1]]);
        if(len2!=0)
        {
            for(int i=0;i<len2-1;i++)
            {
                s=rs2[i];
                printf("%05d %d %05d\n",s,da[s],rs2[i+1]);
            }
            printf("%05d %d -1\n",rs2[len2-1],da[rs2[len2-1]]);
        }
    }
    return 0;
}
目录
相关文章
|
10月前
|
编译器 C语言
C语言程序设计(王立柱)第八章答案 链表
只有聪明人才能看见的摘要~( ̄▽ ̄~)~
62 1
面向对象程序设计第五章:链表
面向对象程序设计第五章:链表
107 0
L2-002 链表去重 (25 分)(结构体模拟)
L2-002 链表去重 (25 分)(结构体模拟)
109 0
7-93 链表去重 (25 分)
7-93 链表去重 (25 分)
109 0
|
C语言
浙大版《C语言程序设计(第3版)》题目集 - 习题11-7 奇数值结点链表(20 分)
浙大版《C语言程序设计(第3版)》题目集 - 习题11-7 奇数值结点链表(20 分)
144 0
|
存储 人工智能 C语言
《C语言及程序设计》程序阅读——链表初步
返回:贺老师课程教学链接 (1)程序下面的阅读,写出其输出结果(建议画出内存中存储的数据,使链表直观地表示出来 ) #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; struct NODE { int num; struct NODE *next; }; int main() { struct N
1014 0
|
C语言 存储
《C语言及程序设计》实践项目——链表初步
返回:贺老师课程教学链接 【项目1-链表的合并】 输入一个整数m,表示A链表的长度,再输入m个数作为A链表中的m个数据元素,建立链表A,其头指针为heada。输入一个整数n,表示B链表的长度,再输入n个数表示B链表中的n个数据元素,建立链表B,其头指针为headb。输入i、len、j,将要从单链表A中删除自第i个元素起的共len个元素,然后将单链表A插入到单链表B的第j个
1249 0
|
C语言
《C语言及程序设计》实践参考——链表的合并
返回:贺老师课程教学链接 【项目1-链表的合并】 输入一个整数m,表示A链表的长度,再输入m个数作为A链表中的m个数据元素,建立链表A,其头指针为heada。输入一个整数n,表示B链表的长度,再输入n个数表示B链表中的n个数据元素,建立链表B,其头指针为headb。输入i、len、j,将要从单链表A中删除自第i个元素起的共len个元素,然后将单链表A插入到单链表B的第j个
1178 0