1074 Reversing Linked List (25分)

题目:1074 Reversing Linked List (25分)

题意

给N个链表结点,以及K,对每K个长度的链表做逆置,输出逆置后的链表。

Sample Input:

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

Sample Output:

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

解法

构造链表,一趟遍历,顺序存入数组,每k个进行翻转。
ps:vector数组,reverse翻转(手动模拟翻转有两个点过不了,真菜啊!!!,欢迎指出错误)

code

/***************************
        Hello World!
***************************/
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

int n;
int head;
int k;

struct node{
    int key;
    int ne;//5位地址
}List[100005],temp;

vector<node>a;

int main()
{
    scanf("%d%d%d",&head,&n,&k);
    for(int i=1;i<=n;i++) {
        int add,key,ne;
        scanf("%d%d%d",&add,&key,&ne);

        List[add].key=key;
        List[add].ne=ne;
    }

    int p=head,j=-1;
    while(p!=-1)
    {
        ++j;
        temp.key=List[p].key;
        temp.ne=p;
        a.push_back(temp);
        p=List[p].ne;
    }
    //有的结点不在

    //为什么用reverse就可以,自己模拟有bug??
    int m=a.size()/k;//可以翻转m次
    for(int i=0;i<m;++i)
    {
        reverse(a.begin()+i*k,a.begin()+i*k+k);
    }
    for(int i=0;i<a.size();i++)
    {
        if(i!=(a.size()-1)) printf("%05d %d %05d\n",a[i].ne,a[i].key,a[i+1].ne);
        else printf("%05d %d -1\n",a[i].ne,a[i].key);
    }

    //为什么手动模拟过不了呢,哪有逻辑错误。。。
//    int i=0;
//    while(i<=j)
//    {
//        if(i+k-1<=j) {
//            for(int x=i+k-1;x>=i;--x)
//            {
//                printf("%05d %d ",a[x].ne,a[x].key);
//                if(x==i) {
//                    if(i+k<=j) printf("%05d\n",a[i+k].ne);
//                    else printf("-1\n");
//                }
//                else {
//                    printf("%05d\n",a[x-1].ne);
//                }
//            }
//        }
//        else {
//            for(int x=i;x<=j;++x)
//            {
//                printf("%05d %d ",a[x].ne,a[x].key);
//                if(x==j) {
//                    printf("-1\n");
//                }
//                else {
//                    printf("%05d\n",a[x+1].ne);
//                }
//            }
//        }
//        i+=k;
//    }
    return 0;
}
/***************************
        The end!
***************************/

总结

还是STL好

posted @ 2020-08-01 23:14  liuyongliu  阅读(153)  评论(0编辑  收藏  举报