[LeetCode] Copy List with Random Pointer

本文介绍了一种复制带有随机指针的复杂链表的方法。通过在每个原始节点之后插入对应拷贝节点的方式,巧妙地解决了随机指针的复制问题。最后,将拷贝链表从原始链表中分离出来。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RandomListNode *copyRandomList(RandomListNode *head) {
	if(head == NULL) {
		return NULL;
	}
	RandomListNode* curNode = head;    
	while(curNode != NULL) {
		RandomListNode* curCopyNode = new RandomListNode(curNode->label);
		RandomListNode* nextNode = curNode->next;
		curNode->next = curCopyNode;
		curCopyNode->next = nextNode;
		curNode = nextNode;
	}
	curNode = head;
	while(curNode != NULL) {
		if(curNode->random != NULL) {
			curNode->next->random = curNode->random->next;
		}
		curNode = curNode->next->next;
	}
	RandomListNode* copyListHead = head->next;
	curNode = head;
	while(curNode != NULL) {
		RandomListNode* curCopyNode = curNode->next;
		RandomListNode* nextNode = curCopyNode->next;
		RandomListNode* nextCopyNode = NULL;
		if(nextNode != NULL) {
			nextCopyNode = nextNode->next;
		}
		curNode->next = nextNode;
		curCopyNode->next = nextCopyNode;
		curNode = nextNode;
	}
	return copyListHead;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值