题解 | #复杂链表的复制#

复杂链表的复制

http://www.nowcoder.com/practice/f836b2c43afc4b35ad6adc41ec941dba

class Solution {
public:
	RandomListNode* Clone(RandomListNode* pHead) {
		//hash表,用于记录旧节点对应的新节点是否已经开辟,同时建立两者的联系
		unordered_map< RandomListNode*, RandomListNode*>m;
		RandomListNode*p = pHead;
		//第一部分,首先根据next开辟所有需要的新节点
		while (p != NULL) {
			//没有新节点,那么创建一个
			if(m.count(p)==0)m[p] = new RandomListNode(p->label);
			//将next指针配好
			if (p->next == NULL)m[p]->next = NULL;
			else {
				if (m.count(p->next) == 0)m[p->next] = new RandomListNode(p->next->label);
				m[p]->next = m[p->next];
			}
			p = p->next;
		}
		//第二部分,将所有random指针连接好
		p = pHead;
		while (p != NULL) {
			if (p->random == NULL) {
				m[p]->random = NULL;
			}
			else {
				m[p]->random = m[p->random];
			}
			p = p->next;
		}

		//返回新链表的头节点
		return m[pHead];//这里就可以明显看出建立map的重要性啦,可以直接根据旧节点找到新节点
	}
};
全部评论

相关推荐

05-09 12:23
已编辑
华南理工大学 Java
野猪不是猪🐗:给他装的,双九+有实习的能看的上这种厂我直接吃⑨✌们拿它练练面试愣是给他整出幻觉了
点赞 评论 收藏
分享
葬爱~冷少:我当时都是上午刷力扣,下午背八股,有活给我先别急,没活就干自己的事情
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务