以下这个题目是我在剑指offer上面看到的,当时刚看题目我也没做出来。实在想不出来,看了题解后才做出来,为了加深印象,在博客中我再仔细做一遍,用c++ 代码实现。
题目描述:
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个指向链表中任意一个节点或NULL),返回结果为复制后复杂链表的head。
节点结构:
class Node
{
public:
Node(int _val)//构造函数,初始化节点
{
this->val = _val;
this->next = nullptr;
this->random = nullptr;
}
private:
int val;
Node* next;//指向下一个节点
Node* random;//指向链表中任意一个节点或NULL
};
解题思路:
我们先不考虑random指针怎么指,把整个过程分解为简单问题来执行:第一步先复制原先的每个节点,原先每个节点的val值可以拿到吧,那我们在构造每个新节点时,只先考虑把val值赋值给新节点,next指针先指向原先节点的下一个节点,原先节点指向新节点,random指针先赋值为空;第二步再考虑r