一直对于链表的操作不太熟悉,借此题目熟悉了链表的复制及初始化等等。该题目是剑指offer上的一个题目,书上提供了两种思路,以下代码实现了第一种思路,不会改变原链表。而书上的第二种思路会改变原链表,不过思想非常巧妙。
此处的复制指的是深拷贝,作为最基本的操作则是单个链表结点的拷贝,自己分配内存来赋值,后面再将每一个链表结点连接起来即可。
/*
struct RandomListNode {
int label;
struct RandomListNode *next, *random;
RandomListNode(int x) :
label(x), next(NULL), random(NULL) {
}
};
*/
RandomListNode * copy(RandomListNode * phead)//拷贝单链表
{
RandomListNode *l;
l =(RandomListNode *)malloc(sizeof(RandomListNode));
l->label=phead->label;
l->next=nullptr;
l->random=nullptr;
return l;
}
class Solution {
private:
vector<RandomListNode*> original;
vector<RandomListNode*> now;
public:
RandomListNode* Clone(RandomListNode* pHead)
{
if(pHead==nullptr)
return nullptr;
RandomListNode * cloned=copy(pHead);
RandomListNode * pH