Copy List with Random Pointer——技巧
2015-08-31 22:08
453 查看
A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.
Return a deep copy of the list.
分析:
我们知道如果是简单的copy List 的话,那么我们只需要从头到尾遍历下来,new出对应个数的Node,并把它们的连接关系设置好就可以了,但是这道题目中每个节点Node出现了Random属性,也就意味着可能当前结点Node所依赖的那个Random对应的结点还没有被创建出来。
如何能够找到新链表每个节点 random 域 所指向的节点呢??
思路: Step 1: 首先指向在原链表的每个节点后面,复制一个新的节点,原链表长度变为 2 倍
random 指针指向的是 原链表节点 random 指针指向的节点的后面的那个节点
Step 2: 将链表拆成两个 lists.
下面的代码不是自己写的,自己写的那个不知道为啥,超时了,也不知道错在哪里,这题还有一种用Map的解法,没去看,到时候好好想想········
Return a deep copy of the list.
分析:
我们知道如果是简单的copy List 的话,那么我们只需要从头到尾遍历下来,new出对应个数的Node,并把它们的连接关系设置好就可以了,但是这道题目中每个节点Node出现了Random属性,也就意味着可能当前结点Node所依赖的那个Random对应的结点还没有被创建出来。
如何能够找到新链表每个节点 random 域 所指向的节点呢??
思路: Step 1: 首先指向在原链表的每个节点后面,复制一个新的节点,原链表长度变为 2 倍
random 指针指向的是 原链表节点 random 指针指向的节点的后面的那个节点
Step 2: 将链表拆成两个 lists.
下面的代码不是自己写的,自己写的那个不知道为啥,超时了,也不知道错在哪里,这题还有一种用Map的解法,没去看,到时候好好想想········
/** * Definition for singly-linked list with a random pointer. * struct RandomListNode { * int label; * RandomListNode *next, *random; * RandomListNode(int x) : label(x), next(NULL), random(NULL) {} * }; */ class Solution { public: RandomListNode *copyRandomList(RandomListNode *head) { RandomListNode *tHead = head; RandomListNode *next = NULL; while(tHead) { next = tHead->next; RandomListNode *node = new RandomListNode(tHead->label); node->next = tHead->next; //node->random = tHead->random; tHead->next = node; tHead= next; } tHead = head; while(tHead) { if(tHead->random) tHead->next->random = tHead->random->next; tHead = tHead->next->next; } RandomListNode *retHead = NULL; RandomListNode *tRet = NULL; tHead = head; RandomListNode *next2 = NULL; while(tHead) { if(retHead == NULL) { next2 = tHead->next->next; retHead = tHead->next; tRet = retHead; tHead->next = next2; tHead = next2; } else { next2 = tHead->next->next; tRet->next = tHead->next; tHead->next = next2; tHead = next2; tRet = tRet->next; } } return retHead; } };
相关文章推荐
- Dmaven.multiModuleProjectDirectory system propery is not set.
- linux 下C语言编程库文件处理与Makefile编写
- 在AR9331上使用Openwrt 默认开启wifi
- 使用unetbootin将Linux安装到U盘
- Nginx基础笔记
- CentOS下TPC-W安装
- Opencv学习(1):高斯滤波
- chmod u+x ./j2sdk-1_4_2_04-linux-i586.bin的含义
- Apache之——配置虚拟主机
- hadoop学习之hadoop完全分布式集群安装
- linux下最常用的命令
- Linux syslog介绍
- LVM的基本应用、扩展及缩减实现
- 添加10个用户user1到user10,但要求只有用户不存在的情况下才能添加
- Linux分区、设备名
- centos7最小化安装没有pstree
- Linux中常用操作命令
- shell统计文本中单词的出现次数
- Linux生产安装小提示--学习更新中。。。
- 【工具系列一】——Tomcat的基本配置