😂这方法太棒了!
给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。
构造这个链表的 深拷贝。
深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。
测试样例1:
输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]] |
---|
输出:[[7,null],[13,0],[11,4],[10,2],[1,0]] |
测试样例2:自己指向直接
输入:head = [[1,1],[2,1]] |
---|
输出:[[1,1],[2,1]] |
测试样例3:val全相同
输入:head = [[3,null],[3,0],[3,null]] |
---|
输出:[[3,null],[3,0],[3,null]] |
测试样例4:为空
输入:head = [] |
---|
输出:NULL |
注意:头节点为空的时候
代码如下:
struct Node* copyRandomList(struct Node* head)
{
if(head==NULL)
return NULL;
//开辟空间
struct Node*copy=NULL;
struct Node*cur=head;
while(cur)
{
struct Node*next=cur->next;
copy=(struct Node*)malloc(sizeof(struct Node));
copy->val = cur->val;
copy->next=next;
cur->next=copy;
cur=next;
}
cur=head;
copy=cur->next;
while(cur)
{
copy=cur->next;
if(cur->random!=NULL)
{
copy->random=cur->random->next;
}
else
{
copy->random=cur->random;
}
cur=copy->next;
}
//链接random
struct Node*guardHead=NULL;
struct Node*guardTail=NULL;
struct Node*liberate=NULL;
guardTail=guardHead=liberate=(struct Node*)malloc(sizeof(struct Node));
cur=head;
while(cur)
{
copy=cur->next;
cur->next=copy->next;
guardTail->next=copy;
guardTail=copy;
cur=copy->next;
}
guardHead=guardHead->next;
free(liberate);
return guardHead;
}
🤣就是玩!
发现每个编辑实例都可以加载不同的css样式表,而且其样式不继承 页面的css。 于...
例如: 我们在百度中搜索 尊托云数,则网址后面的参数就是 http://www.baidu.com/...
Mysql数据库五——mysql事务及引擎 一、事务 1、事务的概念 2、事务的ACID特点 ...
本文实例为大家分享了js实现电灯开关效果的具体代码,供大家参考,具体内容如下 ...
Asp 解析 XML并分页显示,示例源码如下: 复制代码 代码如下: !DOCTYPE html PUB...
我之前写过一个简易版的自动+手动轮播图: 简易轮播图 但是这个轮播图在切换的时...
关于我的SWFObject V1.5的使用过程,以 上篇 中的介绍暂时告一段落了,下面我将...
如果你很在意你的终端的外观的话,一个跨 shell 的提示符可以让你轻松地定制和配...
主要目的 a. 掌握获取 GridPanel 当前行的各个字段值的方法 b. 掌握如何将前台数...
接着昨天的,如果forEach中的items类型是map或者Collection类型的,怎样使用增强...