`
junfeng_feng
  • 浏览: 19924 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

链表 随机指针 复制

阅读更多

//链表 随机指针 复制
#include<iostream>
#include<ctime>
#include<vector>
#include<cstdlib>
using namespace std;
class CNode
{
public:
	int value;
	CNode* next;
	CNode* rand;
	CNode(int v);
	~CNode();
};
CNode::CNode(int v):value(v),next(0),rand(0){}
CNode::~CNode()
{
	cout<<"~CNode()"<<endl;
}
void buildRand(CNode* clink)
{
	int lenOfclink=0;//计算clink的长度
	vector<CNode*> vc;//并记录指针
	CNode* p=clink;
	while(p)
	{
		vc.push_back(p);
		p=p->next;
		lenOfclink++;
	}
	//长度为1
	if(lenOfclink==1)
	{
		clink->rand=clink;
		return;
	}
	else
	{
		p=clink;
		while(p)
		{
			p->rand=vc[rand()%lenOfclink];
			p=p->next;
		}
	}
}
void append(CNode* clink,int v)
{
	CNode* p=clink;
	while(1)
	{
		if(p->next==0)
		{
			p->next=new CNode(v);
			break;
		}
		else
		{
			p=p->next;
		}
	}
	
}
void print(CNode* clink)
{
	CNode* p=clink;
	while(p)
	{
		cout<<"p->value:"<<p->value<<"\n";
		if(p->next)
		{
			cout<<"p->next->value:"<<p->next->value<<"\tp->rand->value:"<<p->rand->value<<endl;
			p=p->next;
		}
		else
		{
			break;
		}
	}
}
void copyLink(CNode* src,CNode* &des)
{
	CNode* p=src,*temp;
	//复制双份src
	while(p)
	{
		temp=p->next;
		//复制一个p
		p->next=new CNode(p->value);
		p->next->next=temp;
		p=temp;
	}
	//复制rand
	p=src;
	while(p)
	{
		p->next->rand=p->rand->next;
		p=p->next->next;
	}
	//分离
	des=src->next;
	p=src;
	while(p)
	{
		temp=p->next;
		p->next=p->next->next;
		if(temp->next)
			temp->next=temp->next->next;
		p=p->next;
	}
}
int main(int args,char* argv[])
{
	//播种
	srand(time(0));

	CNode* clink=new CNode(1);
	append(clink,2);
	append(clink,3);
	append(clink,4);
	append(clink,5);
	buildRand(clink);
	print(clink);

	cout<<endl<<endl;

	CNode* des=0;
	copyLink(clink,des);
	print(des);

	return 0;
}
 
分享到:
评论

相关推荐

    拷贝具有随机指针节点的链表,

    标题“拷贝具有随机指针节点的链表”涉及到的主要知识点是链表的复制,特别是对于带有随机指针的链表。在链表复制的过程中,我们需要保留原始链表的所有信息,包括常规的next指针以及随机指针。由于随机指针的存在,...

    拷贝带随机指针的链表1

    题目要求实现一个函数`copyRandomList`,用于复制一个带有随机指针的链表。链表的节点结构定义如下: ```c typedef struct Node { int val; // 节点值 struct Node *next; // 普通指针,指向下一个节点 struct ...

    复制带随机指针的链表1

    复制带随机指针的链表1

    复制带随机指针的链表.md

    复制带随机指针的链表.md

    复制带随机指针的链表(java代码).docx

    ### 复制带随机指针的链表 #### 问题背景 在计算机科学中,链表是一种常见的数据结构,用于存储一系列元素。每个元素(通常称为节点)包含一个指向链表中下一个节点的指针。然而,在某些情况下,链表中的每个节点...

    catwang01#Algorithm#Leetcode 138. 复制带随机指针的链表1

    Leetcode 138. 复制带随机指针的链表问题描述138. 复制带随机指针的链表 - 力扣(LeetCode)算法解法1:hashtab解法1: 实现解法

    python-leetcode面试题解之第138题随机链表的复制-题解.zip

    在本压缩包中,我们关注的是一个Python编程与算法面试相关的题目,具体是LeetCode的第138题——“复制带有随机指针的链表”。这个题目涉及到链表数据结构以及链表操作,是很多技术面试中常见的问题,尤其对于Python...

    复杂链表的复制1

    题目要求我们复制一个具有额外随机指针的链表,其中每个节点不仅有指向下一个节点的指针,还可能有一个随机指针指向链表中的其他节点或为 NULL。 在提供的解决方案中,采用了以下步骤来完成复杂链表的复制: 1. **...

    bestlyg#bestlyg-leetcode#138.复制带随机指针的链表1

    简介:给你一个长度为n的链表,每个节点包含一个额外增加的随机指针random,该指针可以指向链表中的任何节点或空节点。返回复制链表的头节点。题解 1 - typ

    两两认识leetcode-copy-list-with-random-pointer:使用随机指针复制链表

    使用随机指针复制链表 给出一个链表,使得每个节点都包含一个额外的随机指针,该指针可以指向链表中的任何节点或为空。 返回列表的深层副本。 链表在输入/输出中表示为 n 个节点的列表。 每个节点都表示为一对 [val,...

    qycl50224#leetcode#138. 复制带随机指针的链表1

    思路:直接法第一遍遍历给定链表,创建一个相同val拷贝链表用一个哈希表把给定链表的每个节点和他的index对应,便于之后找random对应的节点的index用另

    面试题35. 复杂链表的复制

    给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。 要求返回这个链表的 深拷贝。 我们用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, ...

    33.复杂链表的复制1

    【描述】:这个题目主要涉及到链表操作,特别是复制一个具有随机指针的链表。我们需要遵循三步走的策略来完成这个任务。 【标签】:“链表” 【部分内容】:这段代码提供了一个解决复杂链表复制问题的算法,具体...

    剑指 Offer 35. 复杂链表的复制python(csdn)————程序.pdf

    这个题目要求我们复制一个具有额外随机指针的链表。每个节点除了拥有常规的`next`指针指向下一个节点之外,还有一个`random`指针可以随机指向链表中的任意节点。我们的任务是复制整个链表,包括复制节点和复制这些`...

    geekerstar#algorithm-tutorial#复杂链表的复制1

    1、遍历链表,复制每个结点,如复制结点A得到A1,将结点A1插到结点A后面 2、重新遍历链表,复制老结点的随机指针给新结点,如A1.random = A.ran

    链表复制源程序

    有一个链表L,其中每个节点包含1 个数据域和2 个指针。一个指针next 指 向链表的下个节点,另一个random 随机指向...要求编写一个程序,首先完成链表的构造,然后复制这个链表的结构,新的链表具有和原链表相同的结构。

    C语言之复杂链表的复制方法(图示详解)

    复杂链表是一种特殊的链表结构,它的每个结点不仅有一个指向下一个节点的指针,还有一个随机指针域,该指针域可以指向链表中的任意一个节点或为空结点。这种链表结构使得链表的操作变得更加复杂。 二、复杂链表的...

    链表的19种算法(C语言)

    9. **复制链表**:创建链表的深拷贝,包括每个节点的数据和指针都要复制。 10. **链表长度**:计算链表中节点的数量,通过遍历链表直到找到空指针即可。 11. **打印链表**:按照顺序输出链表中所有节点的值,这...

    itcharge#LeetCode-Py#剑指 Offer 35. 复杂链表的复制1

    剑指 Offer 35. 复杂链表的复制标签:哈希表、链表难度:中等题目大意给定一个链表,每个节点除了 next 指针之后,还包含一个随机指针 random,该

    RE_链表1

    【Q138 复制带随机指针的链表】是深拷贝链表的问题。我们创建一个映射表,存储旧节点到新节点的对应关系。先复制链表本身,然后再处理随机指针,通过映射表找到对应的新节点。 【Q142 环形链表 II】要求找到环形...

Global site tag (gtag.js) - Google Analytics