剑指offer系列源码-复杂链表的复制
2014-12-08 15:32
423 查看
题目1524:复杂链表的复制 时间限制:1 秒内存限制:128 兆特殊判题:否提交:606解决:292 题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。 输入: 输入可能包含多个测试样例,输入以EOF结束。 对于每个测试案例,输入的第一行为一个整数n (1<=n<=1000):n代表将要输入的链表元素的个数。(节点编号从1开始)。 接下来有n个数,表示链表节点中的值。 接下来有n个数Ti,Ti表示第i个节点的另一个指针指向。 Ti = 0 表示这个指针为NULL。 输出: 对应每个测试案例, 输出n行,每行有二个数,第一个代表当前节点值,第二个代表当前节点的特殊指针的值。 样例输入: 5 1 2 3 4 5 3 5 0 2 0 样例输出: 1 3 2 5 3 0 4 2 5 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; }
相关文章推荐
- 剑指Offer系列-面试题26:复杂链表的复制
- 剑指offer系列-T26复杂链表的复制
- 【剑指offer系列】 复杂链表的复制___26
- python剑指offer系列复杂链表的复制
- 剑指offer系列之二十四:复杂链表的复制
- 剑指offer-面试题26:复杂链表的复制
- 剑指offer系列源码-从尾到头打印链表
- 剑指offer-面试题26.复杂链表的复制
- 剑指offer 面试题26—复杂链表的复制
- 《剑指offer》:[26]复杂链表的复制
- 剑指offer系列源码-反转链表
- 《剑指Offer》面试题:复制复杂链表
- 剑指offer系列源码-合并两个排序的链表
- 剑指Offer--026-复杂链表的复制
- 剑指offer(四十八)之复杂链表的复制
- 剑指offer面试题26之复杂链表的复制
- 《剑指Offer》面试题26:复杂链表的复制
- 复杂链表的复制(剑指offer)
- 剑指offer_面试题26_复杂链表的复制
- 《剑指offer》复杂链表的复制