剑指Offer24 复杂链表的复制
/*************************************************************************
> File Name: 24_ComplexListClone.cpp
> Author: Juntaran
> Mail: JuntaranMail@gmail.com
> Created Time: 2016年08月31日 星期三 14时24分35秒
************************************************************************/ #include <stdio.h>
#include <malloc.h> // 链表结构体
struct ComplexListNode
{
int val;
ComplexListNode* next;
ComplexListNode* rand;
}; // 构造链表
ComplexListNode* createList()
{
ComplexListNode* A = new ComplexListNode();
ComplexListNode* B = new ComplexListNode();
ComplexListNode* C = new ComplexListNode();
ComplexListNode* D = new ComplexListNode();
ComplexListNode* E = new ComplexListNode();
A->val = ;
A->next = B;
A->rand = C;
B->val = ;
B->next = C;
B->rand = E;
C->val = ;
C->next = D;
C->rand = NULL;
D->val = ;
D->next = E;
D->rand = B;
E->val = ;
E->next = NULL;
E->rand = NULL; return A;
} void* PrintComplexList(ComplexListNode* head)
{
while (head)
{
if (head->rand != NULL)
printf("%d rand=%d\n", head->val, head->rand->val);
else
printf("%d\n", head->val);
head = head->next;
}
printf("\n");
} // 复制链表,复制的接在原位置后面
void CloneNodes(ComplexListNode* head)
{
ComplexListNode* node = head;
while (node != NULL)
{
ComplexListNode* newNode = new ComplexListNode();
newNode->val = node->val;
newNode->next = node->next;
newNode->rand = NULL;
node->next = newNode;
node = newNode->next;
}
} // 补充复制的链表的rand指针
void AddRand(ComplexListNode* head)
{
ComplexListNode* node = head;
while (node != NULL)
{
ComplexListNode* newNode = node->next;
if (node->rand != NULL)
newNode->rand = node->rand->next;
node = newNode->next;
}
} // 拆分链表
ComplexListNode* SplitList(ComplexListNode* head)
{
ComplexListNode* node = head;
ComplexListNode* newHead = NULL;
ComplexListNode* newNode = NULL; if (node != NULL)
{
newHead = newNode = node->next;
node->next = newNode->next;
node = node->next;
}
while (node != NULL)
{
newNode->next = node->next;
newNode = newNode->next;
node->next = newNode->next;
node = node->next;
}
return newHead;
} ComplexListNode* Clone(ComplexListNode* head)
{
CloneNodes(head);
AddRand(head);
return SplitList(head);
} int main()
{
ComplexListNode* test = createList();
PrintComplexList(test); ComplexListNode* newTest = Clone(test);
PrintComplexList(test);
PrintComplexList(newTest); }
剑指Offer24 复杂链表的复制的更多相关文章
- 剑指offer-复杂链表的复制
题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用,否 ...
- 剑指Offer——复杂链表的复制
题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用, ...
- 剑指offer-复杂链表的复制-链表-python
题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用,否 ...
- 剑指offer 复杂链表的复制 (有向图的复制)
时间复杂度O(3N) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ...
- 剑指Offer-25.复杂链表的复制(C++/Java)
题目: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用,否则 ...
- 用js刷剑指offer(复杂链表的复制)
题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用,否 ...
- 剑指offer26 复杂链表的复制
/* struct RandomListNode { int label; struct RandomListNode *next, *random; RandomListNode(int x) : ...
- leetcode 203. Remove Linked List Elements 、83. Remove Duplicates from Sorted List 、82. Remove Duplicates from Sorted List II(剑指offer57 删除链表中重复的结点)
203题是在链表中删除一个固定的值,83题是在链表中删除重复的数值,但要保留一个:82也是删除重复的数值,但重复的都删除,不保留. 比如[1.2.2.3],83题要求的结果是[1.2.3],82题要求 ...
- 《剑指offer》 链表中倒数第k个节点
本题来自<剑指offer> 链表中倒数第k个节点 题目: 输入一个链表,输出该链表中倒数第k个结点. 思路: 倒数第k个节点,而且只能访问一遍链表,定义两个节点,两者之间相差k个距离,遍历 ...
随机推荐
- JavaScript谁动了你的代码
到目前为止,同学你知道了JavaScript的历史,也了解其"你想是啥就是啥"的变量系统.相信凭借你深厚的Java或者C++功底,再加上程序员特有的自傲气质,你肯定会信心满满:自信 ...
- 为什么SSL证书流量暴增?
网络服务提供商 Sandvine 近日发布了一份报告,中提到了一个非常有趣的现象:和去年的数据相比,加密网络流量(SSL)在今年正在呈现出爆发式增长. 这个变化在欧洲表现得十分明显:和去年的 1.47 ...
- cocos2dx Http网络编程
转自:http://blog.csdn.net/wangbin_jxust/article/details/9632771,http://blog.csdn.net/wangbin_jxust/art ...
- SAE J2534 Pass-Thru API
Connects to the OBDII J1962 DLC and supports the following protocols. 1 CAN2 Single Wire2 J1850PWM+ ...
- DCEF3 相关资料
DCEF3 调用 js http://www.cnblogs.com/Delphi-Farmer/p/4103708.html interface uses ceflib;//其它 type //这里 ...
- windows无法搜索新更新 80072ee2
http://windows.microsoft.com/zh-cn/windows/windows-update-error-80072ee2#1TC=windows-7
- C++ Interview - using new and delete to alloc and free memory
1. dynamic create object and initialization int *pi = new int; // pi points to an uninitialized int ...
- PHP对大小写敏感问题的处理比较乱,写代码时可能偶尔出问题,所以这里总结一下。以便用到的出现错误
推荐大家始终坚持“大小写敏感”,遵循统一的代码规范. 1. 变量名区分大小写 1 <?php 2 $abc = 'abcd'; 3 echo $abc; //输出 'abcd' 4 echo $ ...
- loading-show-hide
https://github.com/eltld/loading-show-hide
- 【JavaScript】关于js的一些理解
嵌套函数即作用域链:嵌套函数即闭包 函数表达式即延迟执行 匿名函数----------->实现块级作用域 call会切换到调用的对象参数环境.