网商之窗挂,北京优化网站外包公司,在IIs下建设一个网站,广州做网站比较有名的公司1. 题目
给定一个链表#xff0c;每个节点包含一个额外增加的随机指针#xff0c;该指针可以指向链表中的任何节点或空节点。
要求返回这个链表的深拷贝。 《剑指Offer》同题#xff1a;面试题35. 复杂链表的复制
2. 解题
类似题目#xff1a;LeetCode 1484. 克隆含随…1. 题目
给定一个链表每个节点包含一个额外增加的随机指针该指针可以指向链表中的任何节点或空节点。
要求返回这个链表的深拷贝。 《剑指Offer》同题面试题35. 复杂链表的复制
2. 解题
类似题目LeetCode 1484. 克隆含随机指针的二叉树哈希/递归
哈希表存储映射《原节点新节点》
class Solution {
public:Node* copyRandomList(Node* head) {if(head NULL)return NULL;unordered_mapNode*, Node* m;//原节点-新节点 哈希表Node *cur head, *newNode;while(cur ! NULL)//先创建新节点赋值{newNode new Node(cur-val);m[cur] newNode;cur cur-next;}cur head;while(cur ! NULL)//再次遍历查表把新节点指针付进去{m[cur]-next m[cur-next];m[cur]-random m[cur-random];cur cur-next;}return m[head];}
};原地算法先复制一遍链表 a -a.- b- b.- ...接好新链表random拆开两条链表
class Solution {
public:Node* copyRandomList(Node* head) {if(!head)return NULL;Node* cur head, *newNode, *H;while(cur)//复制一遍原链表 a a b b... {newNode new Node(cur-val);newNode-next cur-next;cur-next newNode;cur newNode-next;}cur head;newNode cur-next;while(cur)//把新链表的random接好{if(cur-random)newNode-random cur-random-next;cur cur-next-next;if(cur)newNode cur-next;}cur head;H newNode cur-next;while(newNode-next)//两条链表拆开{cur-next newNode-next;newNode-next newNode-next-next;cur cur-next;newNode newNode-next;}cur-next NULL;return H;}
};