1. 程式人生 > 實用技巧 >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;
}