复制含有随机指针节点的链表——C++实现
来源:互联网 发布:js监听按钮点击事件 编辑:程序博客网 时间:2024/05/21 01:28
【题目】:
一种特殊的链表节点类描述如下:
struct RandomListNode{int label;struct RandomListNode *next, *random;RandomListNode(int x) :label(x), next(NULL), random(NULL) {}};
RandomListNode类中的label是节点值,next指针和正常的单链表指针中的next指针的意义一样,都指向下一个节点,random指针是RandomListNode类中的新增的指针,这个指针可能指向链表中的任意一个节点,也可能指向NULL。
给定一个由RandomListNode节点类型组成的五环单链表的头节点pHead,请实现一个函数完成这个链表中所有结构的复制,并返回复制的新链表的头节点。
【解答】:
1:普通解法
普通解法可以做到时间复杂度为O(N),空间复杂度为O(N)。
具体代码如下:
class Solution{public:RandomListNode* Clone(RandomListNode* pHead){if (pHead == NULL){return NULL;}hash_map<RandomListNode*, RandomListNode*> hashNode;RandomListNode* cur = pHead;while (cur != NULL){RandomListNode* temp = new RandomListNode(cur->label);hashNode[cur] = temp;cur = cur->next;}cur = pHead;while (cur != NULL){hashNode[cur]->next = hashNode[cur->next];hashNode[cur]->random = hashNode[cur->random];cur = cur->next;}return hashNode[pHead];}};
2:进阶解法
不使用额外的数据结构,只用有限的几个变量,且在时间复杂度为O(N)内完成。
具体代码如下:
RandomListNode* Clone(RandomListNode* pHead){if (!pHead) return NULL;RandomListNode *currNode = pHead;while (currNode) {RandomListNode *node = new RandomListNode(currNode->label);node->next = currNode->next;currNode->next = node;currNode = node->next;}currNode = pHead;while (currNode) {RandomListNode *node = currNode->next;if (currNode->random) {node->random = currNode->random->next;}currNode = node->next;}//拆分RandomListNode *pCloneHead = pHead->next;RandomListNode *tmp;currNode = pHead;while (currNode->next) {tmp = currNode->next;currNode->next = tmp->next;currNode = tmp;}return pCloneHead;};
具体解答可以看左程云著《程序员代码面试指南》。
阅读全文
0 0
- 复制含有随机指针节点的链表——C++实现
- 链表问题——复制含有随机指针节点的链表
- 复制含有随机指针节点的链表
- 如何复制一个含有随机指针节点的链表
- 复制含有随机指针节点的链表
- 复制含有随机节点的链表
- 复杂链表的复制(复制含有随机指针节点的链表)
- 复制含有随机指针的链表
- 链表问题---复制含有随机指针节点的链表
- LeetCode OJ 之 Copy List with Random Pointer(复制含有随机指针的链表)
- 含有random指针的链表复制
- O(1)时间复杂度删除链表节点/复制带随机指针的链表
- 复制带随机指针的链表
- 复制带随机指针的链表
- 复制带随机指针的链表
- 复制带随机指针的链表
- 复制带随机指针的链表
- 复制带随机指针的链表
- 关系型数据库和非关系数据库区别
- 设计模式
- Android设置Button字母大小写
- final总结
- 深入Android渲染机制
- 复制含有随机指针节点的链表——C++实现
- File IO(NIO.2):路径类 和 路径操作
- Java与CPU
- iOS 数组排序sortedArrayUsingComparator
- MAC系统安装opencv
- 简单的视觉差页面滚动效果
- 虚拟内存
- Excel2013制作下拉框进行选择性别男或者女提高录入速度
- ubuntu系统中import h5py, ImportError: No module named h5py的解决方法