赞
踩
Problem: 138. 随机链表的复制
使用列表来保存,并按照index来new节点,根据random指向地址对应到index
添加时间复杂度, 示例: O ( n ) O(n) O(n)
添加空间复杂度, 示例: O ( n ) O(n) O(n)
/* // 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) { if(head==nullptr) return nullptr; Node *p0 = head, *p1, *p2, *p3; vector<pair<int, Node *>> tr; vector<Node *> trc, trr; vector<int> ump; while(p0!=nullptr) { tr.push_back({p0->val, p0->random}); trc.push_back(p0); p0 = p0->next; } tr.push_back({-1, nullptr}); trc.push_back(nullptr); for(int i = 0 ; i < tr.size(); i++) { p1 = tr[i].second; for(int j = 0 ; j < trc.size(); j++) { if(p1==trc[j]) { ump.push_back(j); } } } p1 = p2 = new Node(tr[0].first); trr.push_back(p1); for(int i = 1 ; i < tr.size(); i++) { if(i!=tr.size()-1) p3 = new Node(tr[i].first); else p3 = nullptr; trr.push_back(p3); p2->next = p3; p2 = p2->next; } for(int i = 0 ; i < trr.size()-1; i++) { trr[i]->random = trr[ump[i]]; } return p1; } };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。