/*
* 算法思想:
* 第一遍遍历所有节点,建立新链表,先将所有random指针置为NULL;
* 第二遍,为新链表建立random指针,参照旧链表的指向;
* 时间复杂度O(N^2),建立random指针时每个节点都要访问所有节点查询指向哪个节点。
*
*
*/
class Solution {
public:
Node* copyRandomList(Node* head) {
Node *p = head;
Node *last = NULL;
Node node;
node.next = NULL;
Node *rear = &node;
Node *tmp = NULL;
Node *q = NULL;
while(p) {
/* alloc a new object */
tmp = new Node();
tmp->val = p->val;
tmp->random = NULL;
/* add node tmp to temp list */
rear->next = tmp;
rear = rear->next;
rear->next = NULL;
p = p->next;
}
p = head;
q = node.next;
while(p && q){
if(p->random){
tmp = head;
rear = node.next;
while(tmp && rear){
if(p->random == tmp){
q->random = rear;
break;
}
tmp = tmp->next;
rear = rear->next;
}
}
p = p->next;
q = q->next;
}
return node.next;
}
};
LeetCode-138-复制带随机指针的链表-C语言
最新推荐文章于 2022-04-18 20:36:14 发布