7.3 1074 Reversing Linked List (25 分)

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <stack>
#include <queue>

using namespace std;
const int maxn = 100010;

struct Node
{
    int pos;
    int data;
    int next;
    int xxx;
}node[maxn],ans[maxn];



int main()
{
    freopen("in.txt","r",stdin);
    int s1,n,k,path[maxn],countn = 0,kn=0;
    scanf("%d %d %d",&s1,&n,&k);

    for(int i = 0;i<maxn;i++)
        node[i].xxx = -1;

    int p1,p2,l,index = 0;
    for(int i = 0;i<n;i++)
    {
        scanf("%d %d %d",&p1,&l,&p2);
        node[p1].data = l;
        node[p1].next = p2;
        node[p1].pos = p1;
    }
    if(k == 0)
        k = 1;
    if(n==0)
        printf("0 -1");
    else
    {
        int head = s1;
        while(head!=-1)
        {
            kn++;
            head = node[head].next;
        }
        int temp = kn / k;

        for(int j = 0;j<temp;j++)
        {
            countn = 0;
            while(s1!=-1)
            {
                path[countn] = s1;
                s1 = node[s1].next;
                countn++;
                if(countn == k)
                break;
            }

            for(int i = countn - 1;i>=0;i--)
                {
                            ans[index].pos = path[i];
                            ans[index++].data = node[path[i]].data;
//                        printf("%05d %d %05d\n",path[i],node[path[i]].data,path[i-1]);
                }
        }
    while(s1!=-1)
    {
            ans[index].pos = s1;
            ans[index++].data = node[s1].data;
//            printf("%05d %d %05d\n",s1,node[s1].data,node[s1].next);
        s1 = node[s1].next;
    }
    for(int i = 0;i<index;i++)
    {
        if(i == index - 1)
            printf("%05d %d -1\n",ans[i].pos,ans[i].data);
        else
            printf("%05d %d %05d\n",ans[i].pos,ans[i].data,ans[i+1].pos);
    }
    }



}

错了最后一个点,扣一分;
(ps:错误点在于temp 也就是循环的次数是由链表的有效节点kn\k决定而不是n、k

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <stack>
#include <queue>

using namespace std;
const int maxn = 100010;

struct Node
{
    int pos;
    int data;
    int next;
    int xxx;
}node[maxn],ans[maxn];



int main()
{
   // freopen("in.txt","r",stdin);
    int s1,n,k,path[maxn],countn = 0;
    scanf("%d %d %d",&s1,&n,&k);
    int temp;
    if(k!=0)
        temp = n / k;
    else
        temp = 1;
    for(int i = 0;i<maxn;i++)
        node[i].xxx = -1;

    int p1,p2,l,index = 0;
    for(int i = 0;i<n;i++)
    {
        scanf("%d %d %d",&p1,&l,&p2);
        node[p1].data = l;
        node[p1].next = p2;
        node[p1].pos = p1;
    }
    if(k == 0)
        k = 1;
    if(n==0)
        printf("0 -1");
    else
    {
        for(int j = 0;j<temp;j++)
        {
            countn = 0;
            while(s1!=-1)
            {
                path[countn] = s1;
                s1 = node[s1].next;
                countn++;
                if(countn == k)
                break;
            }

            for(int i = countn - 1;i>=0;i--)
                {
                            ans[index].pos = path[i];
                            ans[index++].data = node[path[i]].data;
//                        printf("%05d %d %05d\n",path[i],node[path[i]].data,path[i-1]);
                }
        }
    while(s1!=-1)
    {
            ans[index].pos = s1;
            ans[index++].data = node[s1].data;
//            printf("%05d %d %05d\n",s1,node[s1].data,node[s1].next);
        s1 = node[s1].next;
    }
    for(int i = 0;i<index;i++)
    {
        if(i == index - 1)
            printf("%05d %d -1\n",ans[i].pos,ans[i].data);
        else
            printf("%05d %d %05d\n",ans[i].pos,ans[i].data,ans[i+1].pos);
    }
    }



}

发布了111 篇原创文章 · 获赞 4 · 访问量 3228

猜你喜欢

转载自blog.csdn.net/qq_15556537/article/details/99235709