复杂链表的复制

来源:互联网 发布:javascript 页面刷新 编辑:程序博客网 时间:2024/06/06 05:52
题目1524:复杂链表的复制

时间限制:1 秒

内存限制:128 兆

特殊判题:

提交:715

解决:340

题目描述:

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

输入:

输入可能包含多个测试样例,输入以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 <iostream>using namespace std;struct CompListNode{    int val;    CompListNode *ptr;    CompListNode *next;    CompListNode(int data):val(data),ptr(NULL),next(NULL){}//构造函数没有返回类型};CompListNode * CreatList(int n){    int val=0;    CompListNode *pHead,*pCur,*pTemp;    pHead=new CompListNode(0);    pTemp=pHead;    for(int i=0;i<n;i++)    {        cin>>val;        pCur=new CompListNode(val);         pTemp->next=pCur;        pTemp=pCur;    }    pTemp->next=NULL;    pTemp=pHead;    pCur=pHead->next;    int next_index;    for(int i=0;i<n;i++)    {        cin>>next_index;        if(next_index!=0)        {            while(next_index>0)            {                pTemp=pTemp->next;                next_index--;            }            pCur->ptr=pTemp;        }        pCur=pCur->next;        pTemp=pHead;    }    return pHead;}void PrintList(CompListNode *pHead){    CompListNode *pCur=pHead->next;    while(pCur!=NULL)    {        cout<<pCur->val<<" ";        if(pCur->ptr==NULL)            cout<<"0"<<endl;        else            cout<<pCur->ptr->val<<endl;        pCur=pCur->next;    }}int main(){    int n;    while(cin>>n)    {        CompListNode *pHead;        pHead=CreatList(n);        PrintList(pHead);    }    return 0;}/**************************************************************    Problem: 1524    User: road    Language: C++    Result: Accepted    Time:120 ms    Memory:1652 kb****************************************************************/


0 0