九度oj-1524-复杂链表的复制

来源:互联网 发布:淘宝店铺地址能改吗 编辑:程序博客网 时间:2024/06/04 17:51

时间限制:1 秒

内存限制:128 兆

特殊判题:

提交:805

解决:384

题目描述:

输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。

输入:

输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行为一个整数n (1<=n<=1000):n代表将要输入的链表元素的个数。(节点编号从1开始)。
接下来有n个数,表示链表节点中的值。
接下来有n个数Ti,Ti表示第i个节点的另一个指针指向。
Ti = 0 表示这个指针为NULL。

输出:

对应每个测试案例,
输出n行,每行有二个数,第一个代表当前节点值,第二个代表当前节点的特殊指针的值。

样例输入:
51 2 3 4 53 5 0 2 0
样例输出:
1 32 53 04 25 0 
#include<stdio.h>#include<stdlib.h>typedef struct Lnode{    int data1,data2;    struct Lnode *next;}Lnode,*Link;int main(){    int n,i,count,t;    while(scanf("%d",&n)!=EOF)    {        Link la,pa,p;        la=(Link)malloc(sizeof(Lnode));        la->next=NULL;        pa=la;        for(i=0;i<n;i++)        {            p=(Link)malloc(sizeof(Lnode));            scanf("%d",& p->data1);            p->next = pa->next;            pa->next = p;            pa=p;        }        pa=la->next;        for(i=0;i<n;i++)        {            scanf("%d",&t);            if(t==0)                pa->data2=0;            else            {                count=1;                p=la->next;                while(count<t)                {                    p=p->next;                    count++;                }                pa->data2 = p->data1;            }            pa=pa->next;        }        p=la;        la=la->next;        free(p);        while(la)        {            printf("%d %d\n",la->data1,la->data2);            p=la;            la=la->next;            free(p);        }    }    return 0;}#include<stdio.h>int a[1003][2];int main(){    int n,i;    while(scanf("%d",&n)!=EOF)    {        for(i=1;i<=n;i++)            scanf("%d",&a[i][0]);        for(i=1;i<=n;i++)            scanf("%d",&a[i][1]);        for(i=1;i<=n;i++)            if(a[i][1]==0)                printf("%d %d\n",a[i][0],a[i][1]);            else                printf("%d %d\n",a[i][0],a[ a[i][1] ][0]);    }    return 0;}


0 0