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

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

给定一个单链表 L1→L2→⋯→Ln−1→Ln,请编写程序将链表重新排列为 Ln→L1→Ln−1→L2→⋯。例如:给定L为1→2→3→4→5→6,则输出应该为6→1→5→2→4→3。


输入格式:

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


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

Address Data Next

其中Address是结点地址;Data是该结点保存的数据,为不超过105的正整数;Next是下一结点的地址。题目保证给出的链表上至少有两个结点。


输出格式:

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


输入样例:

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


输出样例:

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


思路:用结构体模拟链表

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
struct node
{
    int data,next;
}s[N];
int a[N];//存结点地址
int main()
{
    int m,n,k=0;
    cin>>m>>n;
    for(int i=0;i<n;i++)
    {
        int x;
        cin>>x;
        cin>>s[x].data>>s[x].next;
    }
    while(m!=-1)
    {
        a[k++]=m;
        m=s[m].next;
    }
    int i,j;
    for(i=0,j=k-1;i<k/2;i++)
    {
        printf("%05d %d %05d\n",a[j],s[a[j]].data,a[i]);//输出从后遍历的
        j--;
        if(i==j) break;
        printf("%05d %d %05d\n",a[i],s[a[i]].data,a[j]);//输出从前面遍历的
    }
    printf("%05d %d -1",a[j],s[a[j]].data);
    return 0;
}
目录
相关文章
|
7月前
|
C++
【编码狂想】指针航行,链表魔法,解锁结构体和类的编程幻境
【编码狂想】指针航行,链表魔法,解锁结构体和类的编程幻境
84 1
|
2月前
|
C语言
C语言结构体链式结构之有头单链表
文章提供了一个C语言实现的有头单链表的完整代码,包括创建链表、插入、删除和打印等基本操作。
31 1
|
3月前
|
存储 C语言
C语言程序设计核心详解 第九章 结构体与链表概要详解
本文档详细介绍了C语言中的结构体与链表。首先,讲解了结构体的定义、初始化及使用方法,并演示了如何通过不同方式定义结构体变量。接着,介绍了指向结构体的指针及其应用,包括结构体变量和结构体数组的指针操作。随后,概述了链表的概念与定义,解释了链表的基本操作如动态分配、插入和删除。最后,简述了共用体类型及其变量定义与引用方法。通过本文档,读者可以全面了解结构体与链表的基础知识及实际应用技巧。
实验:数据结构(结构体在单链表中的增删改查)
实验:数据结构(结构体在单链表中的增删改查)
|
7月前
|
Rust 索引
Rust 编程小技巧摘选(6)
Rust 编程小技巧摘选(6)
84 1
Rust 编程小技巧摘选(6)
|
7月前
|
Java Go C++
Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分
Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分
59 0
Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分
|
7月前
|
存储 Java 容器
leetcode-143:重排链表
leetcode-143:重排链表
38 0
|
7月前
|
Go
golang力扣leetcode 143.重排链表
golang力扣leetcode 143.重排链表
44 0
|
7月前
【每日一题Day281】LC143 重排链表 | 快慢指针+反转链表
【每日一题Day281】LC143 重排链表 | 快慢指针+反转链表
50 0
|
7月前
|
存储 算法 vr&ar
☆打卡算法☆LeetCode 143. 重排链表 算法解析
☆打卡算法☆LeetCode 143. 重排链表 算法解析