【剑指offer】题26:复杂链表的复制
2017-07-02 19:47
344 查看
空间换时间:
不用辅助空间的标准解法:
RandomListNode* Clone(RandomListNode* pHead) { vector<RandomListNode*> vec; vector<int> rand_index; RandomListNode * tmp(pHead); while(tmp!=NULL) { vec.push_back(tmp); tmp = tmp->next; } tmp = pHead; while (tmp!=NULL) { rand_index.push_back(find(vec.begin(), vec.end(), tmp->random)-vec.begin()); tmp = tmp->next; } vector<RandomListNode*> new_vec; for (auto i = 0; i < vec.size();++i) { RandomListNode* newnode = new RandomListNode(vec[i]->label); new_vec.push_back(newnode); } new_vec.push_back(NULL); for (auto i = 0; i < new_vec.size()-1;++i) { new_vec[i]->next = new_vec[i + 1]; new_vec[i]->random = new_vec[rand_index[i]]; } return new_vec[0]; }
不用辅助空间的标准解法:
void copynode(RandomListNode* pHead) { RandomListNode* curNode(pHead); RandomListNode* newnode; while (curNode!=NULL) { newnode = new RandomListNode(curNode->label); newnode->next = curNode->next; curNode->next = newnode; curNode = newnode->next; } } void copyrandom(RandomListNode* pHead) { RandomListNode* curnode(pHead); RandomListNode* newnode(pHead->next); while (1) { if (curnode->random!=NULL) { newnode->random = curnode->random->next; } if (newnode->next == 4000 NULL) { break; } curnode = curnode->next->next; newnode = newnode->next->next; } } RandomListNode* fixnext(RandomListNode* pHead) { RandomListNode* newhead = pHead->next; RandomListNode* prenode(pHead); RandomListNode* curnode(pHead->next); while (1) { prenode->next = curnode->next; prenode = curnode; if (curnode->next == NULL) { break; } curnode = curnode->next; } return newhead; } RandomListNode* Clone(RandomListNode* pHead) { if (pHead == NULL) { return NULL; } copynode(pHead); copyrandom(pHead); return fixnext(pHead); }
相关文章推荐
- 【剑指Offer】面试题26:复杂链表的复制
- 剑指offer面试题26之复杂链表的复制问题
- 剑指offer-面试题26-复杂链表的复制
- 剑指Offer 26 复杂链表的复制
- 剑指offer-面试题26 复杂链表的复制
- 剑指offer 面试题26 复杂链表的复制
- 剑指offer-4-面试26:复杂链表的复制
- 【剑指offer-Java版】26复杂链表的复制
- 剑指offer26:复杂链表复制
- [剑指offer][面试题26]复杂链表的复制
- 剑指Offer-26-复杂链表的复制
- 剑指Offer26复杂链表的复制
- 剑指offer 面试题26 复杂链表的复制
- 剑指Offer面试题26(Java版):复杂链表的复制
- 剑指Offer-26-复杂链表的复制-优化
- 剑指Offer26:复杂链表的复制
- 剑指offer——面试题26:复杂链表的复制
- 剑指offer--面试题26:复杂链表的复制--Java实现
- 剑指Offer----面试题26:复杂链表的复制
- 剑指Offer面试题26复杂链表的复制,面试题27二叉搜索树和双向链表(递归)