zoukankan      html  css  js  c++  java
  • PAT 天梯赛 L2-022. 重排链表 【数据结构】

    题目链接

    https://www.patest.cn/contests/gplt/L2-022

    思路

    先用结构体 把每个结点信息保存下来
    然后深搜一下 遍历一下整个链表

    然后就重新排一下

    但是要注意一个坑点 是
    有效的结点数 不一定是n 这个原因 导致第三个测试点过不了
    意思就是 它给出N 个结点 但是不一定这N个结点 都是在一张链表上的
    也就是说 我们需要仅仅是 头结点在的那张链表

    因为 它仅仅需要输出 所以 下一个地址 直接输出下一个地址的地址就可以了

    而不用 所以操作 重新指向一遍

    查了好久。。

    AC代码

    #include <cstdio>
    #include <cstring>
    #include <ctype.h>
    #include <cstdlib>
    #include <cmath>
    #include <climits>
    #include <ctime>
    #include <iostream>
    #include <algorithm>
    #include <deque>
    #include <vector>
    #include <queue>
    #include <string>
    #include <map>
    #include <stack>
    #include <set>
    #include <numeric>
    #include <sstream>
    #include <iomanip>
    #include <limits>
    
    #define CLR(a) memset(a, 0, sizeof(a))
    #define pb push_back
    
    using namespace std;
    typedef long long ll;
    typedef long double ld;
    typedef unsigned long long ull;
    typedef pair <int, int> pii;
    typedef pair <ll, ll> pll;
    typedef pair<string, int> psi;
    typedef pair<string, string> pss;
    
    const double PI = 3.14159265358979323846264338327;
    const double E = exp(1);
    const double eps = 1e-6;
    
    const int INF = 0x3f3f3f3f;
    const int maxn = 1e6 + 5;
    const int MOD = 1e9 + 7;
    
    int pos[maxn];
    
    struct Node
    {
        int add;
        int value;
        int next;
    }temp;
    
    vector <Node> ans, vis;
    
    map <int, Node> m;
    
    void dfs(int add)
    {
        vis.pb(m[add]);
        if (m[add].next != -1)
            dfs(m[add].next);
    }
    
    int main()
    {
        int ini, n;
        scanf("%d%d", &ini, &n);
        for (int i = 0; i < n; i++)
        {
            scanf("%d %d %d", &temp.add, &temp.value, &temp.next);
            m[temp.add] = temp;
        }
        dfs(ini);
        int l = 0, r = vis.size() - 1;
        while (1)
        {
            if (r < l)  
                break;
            ans.pb(vis[r]);
            r--;
            if (r < l)
                break;
            ans.pb(vis[l]);
            l++;
        }
        n = ans.size() - 1;
        for (int i = 0; i < n; i++)
            printf("%05d %d %05d
    ", ans[i].add, ans[i].value, ans[i + 1].add);
        printf("%05d %d -1
    ", ans[n].add, ans[n].value);
    }
  • 相关阅读:
    Scrapy 概览笔记
    Python 依赖版本控制 (requirements.txt 文件生成和使用)
    Python 虚拟空间的使用
    macOS 所有版本 JDK 安装指南 (with Homebrew)
    鉴权那些事
    Java 位运算符和 int 类型的实现
    ASP.NET Core 入门教程 5、ASP.NET Core MVC 视图传值入门
    如何做好一次知识或技术分享
    ASP.NET Core 入门教程 4、ASP.NET Core MVC控制器入门
    ASP.NET Core 入门教程 3、ASP.NET Core MVC路由入门
  • 原文地址:https://www.cnblogs.com/Dup4/p/9433186.html
Copyright © 2011-2022 走看看