当前位置 博文首页 > 文章内容

    PAT(Basic Level) Practice : 1025 反转链表 (25分)

    作者: 栏目:未分类 时间:2020-09-20 18:00:51

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    1025 反转链表 (25分)

    难点/坑:测试点5,测试点6

    测试点6:没有说所有给的测试点都是有效的,从头到尾遍历链表后,要更新节点数目。
    比如说:
    00100 8 4
    00000 4 99999
    00100 1 12309
    68237 6 -1
    33218 3 00000
    99999 5 68237
    12309 2 33218
    66 33 33
    78 78 78

    8个节点中只有6个是有效的,最后两个是凑数的。

    测试点5:运行超时
    把cout换成printf输出

    注意:printf输出string

    string str="test";
    printf("%s\n",str.c_str);
    

    代码

    #include <iostream>
    #include"stdlib.h"
    #include <vector>
    #include <cstdio>
    //scanf printf防止超时
    
    #include <algorithm>
    //vector的sort
    #include <sstream>
    //转换
    
    using namespace std;
    
    #include<iomanip>
    //精度
    
    class element
    {
    public:
        string add;
        int data;
        string next;
        element()
        {
            add="";
            data=0;
            next="";
        }
    };
    
    int main()
    {
        string first;
        int number;
        int K;
        cin>>first>>number>>K;
    
        vector<element> List;
        for(int i=0;i<number;i++)
        {
            string add;
            int data;
            string next;
            cin>>add>>data>>next;
    
            element temp;
            temp.add=add;
            temp.data=data;
            temp.next=next;
    
            List.push_back(temp);
        }
    
    
    
        vector<element> right_seq;
        string point=first;
        while(point!="-1")
        {
            for(int i=0;i<List.size();i++)
            {
                if(List[i].add==point)
                {
                    right_seq.push_back(List[i]);
                    point=List[i].next;
                }
            }
        }
    
        //去除无效节点
        number=right_seq.size();
        int time=number/K;
    
        vector<element> res;
        for(int i=1;i<=time;i++)
        {
            for(int j=i*K-1;j>=(i-1)*K;j--)
            {
                element temp;
                temp.add=right_seq[j].add;
                temp.data=right_seq[j].data;
                res.push_back(temp);
            }
        }
    
        if(number%K>0)
        {
            for(int i=time*K;i<right_seq.size();i++)
            {
                element temp;
                temp.add=right_seq[i].add;
                temp.data=right_seq[i].data;
                res.push_back(temp);
            }
        }
    //cout<<"res"<<endl;
        for(int i=0;i<res.size()-1;i++)
        {
            printf("%s %d %s\n",res[i].add.c_str(),res[i].data,res[i+1].add.c_str());
            //cout<<res[i].add<<" "<<res[i].data<<" "<<res[i+1].add<<endl;
        }
    
        printf("%s %d -1\n",res[number-1].add.c_str(),res[number-1].data);
        //cout<<res[number-1].add<<" "<<res[number-1].data<<" -1"<<endl;
        return 0;
    }