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

时间:2020-09-20
本文章向大家介绍PAT(Basic Level) Practice : 1025 反转链表 (25分),主要包括PAT(Basic Level) Practice : 1025 反转链表 (25分)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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;
}

原文地址:https://www.cnblogs.com/zchq/p/13701187.html