剑指offer系列源码-复杂链表的复制

来源:互联网 发布:java heap size 设置 编辑:程序博客网 时间:2024/06/06 03:47

题目1524:复杂链表的复制时间限制:1 秒内存限制:128 兆特殊判题:否提交:606解决:292题目描述:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。输入:输入可能包含多个测试样例,输入以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>#include<stdio.h>using namespace std;struct ListNode{    int value;    ListNode* next;    ListNode* random_link;};int main(){    int n,num;    while(scanf("%d",&n)!=EOF){        ListNode* nodes = new ListNode[n+1];        for(int i=1;i<=n;i++){            scanf("%d",&nodes[i].value);            nodes[i].next = NULL;            nodes[i].random_link = NULL;        }        for(int i=1;i<=n;i++){            scanf("%d",&num);            if(num>0)            nodes[i].random_link = &nodes[num];        }        for(int i=1;i<=n;i++){            printf("%d %d\n",nodes[i].value,nodes[i].random_link!=NULL?nodes[i].random_link->value:0);        }    }    return 0;}


#include <iostream>#include<stdio.h>using namespace std;struct ListNode{    int value;    ListNode* next;    ListNode* random_link;};//step1 复制节点void cloneNodes(ListNode* pHead){    ListNode* pNode = pHead;    while(pNode!=NULL){        ListNode* pClone = new ListNode();        pClone->value = pNode->value;        pClone->next = pNode->next;        pClone->random_link = NULL;        pNode->next = pClone;        pNode = pClone->next;    }}void connectRandomNodes(ListNode* pHead){    ListNode* pNode = pHead;    while(pNode){        ListNode* pClone = pNode->next;        if(pNode->random_link!=NULL){            pClone->random_link = pNode->random_link->next;        }        pNode = pClone->next;    }}ListNode* reconnentNodes(ListNode* pHead){    ListNode* pNode = pHead;    ListNode* pCloneHead = NULL;    ListNode* pCloneNode = NULL;    if(pNode!=NULL){        pCloneHead = pCloneNode = pNode->next;        pNode->next = pCloneNode->next;        pNode = pNode->next;    }    while(pNode){        pCloneNode->next = pNode-next;        pCloneNode = pCloneNode->next;        pNode->next = pCloneNode->next;        pNode = pNode->next;    }    return pCloneHead;}//将上面三步合起来ListNode* clone(ListNode* pHead){       cloneNodes(pHead);       connectRandomNodes(pHead);       return reconnentNodes(pHead);}int main(){    return 0;}

0 0
原创粉丝点击