题目:

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.

解题思路:

拷贝链表时,新节点的random指针不太好设置,因为是随机的,所以如果采用常规方法,必须每设置一个新节点的random指针时,必须到两链表中进行查找。

这里,我采用了一些小技巧,当拷贝一个新节点时,将该新节点连接到原节点的后面

第一步做完后,遍历链表,设置拷贝节点的random指针,设置拷贝节点的random指针时,可根据原节点的random指针进行设置,因为原节点的random指向的节点的下一个节点即为拷贝节点额random要指向的节点。

最后,将链表进行分离即可。

实现代码:

#include <iostream>
using namespace std; struct RandomListNode
{
int label;
RandomListNode *next, *random;
RandomListNode(int x) : label(x), next(NULL), random(NULL) {}
}; class Solution {
public:
RandomListNode *copyRandomList(RandomListNode *head) {
if(head == NULL)
return NULL;
RandomListNode *p = head;
while(p)
{
RandomListNode *node = new RandomListNode(p->label);//拷贝一个新节点,然后将该新节点链接到原节点的后面
node->next = p->next;
p->next = node;
p = node->next;
} p = head;
while(p)//根据原节点设置新节点的random指针
{
if(p->random)//如果原节点的random指针不为空则设置拷贝节点
{
//拷贝节点的random指针指向的节点可利用原节点的random指针找到,
//因为每个拷贝节点都在原节点的下一个节点
p->next->random = p->random->next;
} p = p->next->next;
} //将原链表和新建链表进行分离
RandomListNode *chead = head->next;
head->next = head->next->next;
RandomListNode *q = chead;
head = head->next;
while(head)
{
q->next = head->next;
head->next = head->next->next;
head = head->next;
q = q->next; }
return chead; }
};
int main(void)
{
return ;
}

最新文章

  1. SQL Server性能计数器部署(批量)
  2. 3 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之heartbeat的搭建
  3. Oracle中的数据类型
  4. 循环效率对比 js node c# mssql
  5. centreon 降低rrd磁盘读写
  6. 解决YUM无法正常工作
  7. Python调用C模块以及性能分析
  8. 在实体类中将数据库中数据类型为CLOB的数据转化成String类型
  9. C文件IO
  10. Forms身份验证和基于Role的权限验证
  11. Python学习笔记——进阶篇【第八周】———进程、线程、协程篇(Socket编程进阶&amp;多线程、多进程)
  12. 服务器返回webview字符串,用该字符串填满整个屏幕,不可缩放
  13. Natas Wargame Level25 Writeup(头部注入+POST/GET注入)
  14. 《深入分析Java web技术内幕》读书笔记(一)
  15. 常见的SQLALCHEMY列类型
  16. mysql攻防之写入漏洞
  17. 如何禁止chrome自动跳转https
  18. storm(二) 事务机制
  19. BZOJ1101 POI2007 Zap 【莫比乌斯反演】
  20. laravel-ide-helper 遇到There are no commands defined问题怎么解决

热门文章

  1. 了解大数据的特点、来源与数据呈现方式以及用Python写Mad Libs游戏
  2. Java的Reflection机制
  3. ios runtime简单实用(添加动态属性)
  4. ios 点击Home问题
  5. VR
  6. PAT 1034 有理数四则运算(20)(代码框架+思路+测试点错误分析)
  7. 基于KVM的qemu中宿主机和虚拟机间的通信
  8. POJ 1122.FDNY to the Rescue! Dijkstra
  9. php调java接口
  10. jquery 插入节点的方法