L2-022 重排链表 (25 分)(map+结构体模拟)

简介: L2-022 重排链表 (25 分)(map+结构体模拟)

描述:



25b6030e26f90df2af83c6b7bd5d1e2c_d29f22e4350a456e8d803ada23eb44cb.png


输入:


每个输入包含1个测试用例.每个测试用例第1行给出第1个结点的地址和结点总个数,即正整数N ≤105)。结点的地址是5位非负整数,NULL地址用−1表示。


接下来有N行,每行格式为:


Address Data Next


其中Address是结点地址;Data是该结点保存的数据,为不超过10 5

的正整数;Next是下一结点的地址。题目保证给出的链表上至少有两个结点。


输出:


对每个测试用例,顺序输出重排后的结果链表,其上每个结点占一行,格式与输入相同。


样例输入:


00100 6
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218


样例输出:


68237 6 00100
00100 1 99999
99999 5 12309
12309 2 00000
00000 4 33218
33218 3 -1


注意:


测试点三一开始错了,试了试,发现给出的地址数据中有不在链表中的无效数据,改正一下;

/*
00100 6
00000 4 99999
00100 1 12309
33218 3 00000
99999 5 -1
12309 2 33218
sssss 6 sssss//无效数据测试
*/
 #include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const ll maxx = 1e18;
const int N = 1e6+100;
const int ps = 1e4+10;
const double eps = 1e-8;
string s1,ss;
int n,cnt;
pair<int,string>p;
map<string,pair<int,string>>mp;
struct node{
  string adds;
  int k;
}a[N];
int main()
{
  cin>>s1>>n;
  for(int i=1;i<=n;i++)
  {
    cin>>ss>>p.first>>p.second;
    mp[ss]=p;
  }//记录信息
  while(s1!="-1")
  {
    a[++cnt].adds=s1;
    a[cnt].k=mp[s1].first;
    s1=mp[s1].second;
  }//把信息存到结构体中
  n=cnt;//把 n 换成有效个数
  if(n%2==0)
  {
    for(int i=1;i<=n/2;i++)
    {
      cout<<a[n-i+1].adds<<" "<<a[n-i+1].k<<" ";
      cout<<a[i].adds<<endl<<a[i].adds<<" "<<a[i].k<<" ";
      if(i!=n/2)
      cout<<a[n-i].adds<<endl;
      else
      cout<<"-1";
    }
  }
  else
  {
    for(int i=1;i<=n/2;i++)
    {
      cout<<a[n-i+1].adds<<" "<<a[n-i+1].k<<" ";
      cout<<a[i].adds<<endl<<a[i].adds<<" "<<a[i].k<<" ";
      cout<<a[n-i].adds<<endl;
    }
    cout<<a[n/2+1].adds<<" "<<a[n/2+1].k<<" "<<"-1";
  }
}//依次输出

目录
相关文章
|
6月前
|
C++
【编码狂想】指针航行,链表魔法,解锁结构体和类的编程幻境
【编码狂想】指针航行,链表魔法,解锁结构体和类的编程幻境
84 1
|
1月前
|
C语言
C语言结构体链式结构之有头单链表
文章提供了一个C语言实现的有头单链表的完整代码,包括创建链表、插入、删除和打印等基本操作。
25 1
|
2月前
|
存储 C语言
C语言程序设计核心详解 第九章 结构体与链表概要详解
本文档详细介绍了C语言中的结构体与链表。首先,讲解了结构体的定义、初始化及使用方法,并演示了如何通过不同方式定义结构体变量。接着,介绍了指向结构体的指针及其应用,包括结构体变量和结构体数组的指针操作。随后,概述了链表的概念与定义,解释了链表的基本操作如动态分配、插入和删除。最后,简述了共用体类型及其变量定义与引用方法。通过本文档,读者可以全面了解结构体与链表的基础知识及实际应用技巧。
实验:数据结构(结构体在单链表中的增删改查)
实验:数据结构(结构体在单链表中的增删改查)
|
6月前
|
Rust 索引
Rust 编程小技巧摘选(6)
Rust 编程小技巧摘选(6)
83 1
Rust 编程小技巧摘选(6)
|
6月前
|
Java Go C++
Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分
Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分
58 0
Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分
|
6月前
|
存储 Java 容器
leetcode-143:重排链表
leetcode-143:重排链表
34 0
|
6月前
|
Go
golang力扣leetcode 143.重排链表
golang力扣leetcode 143.重排链表
44 0
|
6月前
【每日一题Day281】LC143 重排链表 | 快慢指针+反转链表
【每日一题Day281】LC143 重排链表 | 快慢指针+反转链表
49 0
|
6月前
|
存储 算法 vr&ar
☆打卡算法☆LeetCode 143. 重排链表 算法解析
☆打卡算法☆LeetCode 143. 重排链表 算法解析