标签:Node node head Offer random 35 next 链表 null
请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。示例 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:
输入:head = [[3,null],[3,0],[3,null]]
输出:[[3,null],[3,0],[3,null]]
示例 4:
输入:head = []
输出:[]
解释:给定的链表为空(空指针),因此返回 null。
提示:
-10000 <= Node.val <= 10000
Node.random 为空(null)或指向链表中的节点。
节点数目不超过 1000 。
用一个二维数组记录对应random的对应即可
注意head == nullptr时,直接返回nullptr,别返回没开辟空间的指针
/* // Definition for a Node. class Node { public: int val; Node* next; Node* random; Node(int _val) { val = _val; next = NULL; random = NULL; } }; */ class Solution { public: Node* copyRandomList(Node* head) { int corres[1100]; Node* node[1010]; if(head == nullptr) return nullptr; Node* p = head; int i = 0, n = 0; while(p) { if(p->random == nullptr) corres[i] = -1; else { Node* t = head; int j = 0; while(t) { if(p->random == t) { corres[i] = j; break; } t = t->next; j++; } } node[i] = new Node(p->val); p = p->next; i++; } n = i; i = 0; p = head; while(p) { if(i < n - 1) node[i]->next = node[i + 1]; else node[i]->next = nullptr; if(corres[i] == -1) node[i]->random = nullptr; else node[i]->random = node[corres[i]]; i++; p = p->next; } return node[0]; } };
标签:Node,node,head,Offer,random,35,next,链表,null 来源: https://www.cnblogs.com/WTSRUVF/p/16474837.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。