![](https://img.haomeiwen.com/i22517122/ea2520bfad3802a2.png)
思路
如果是普通链表的复制,则只需要遍历一遍,依次拼接上当前节点即可
![](https://img.haomeiwen.com/i22517122/8a2b4fbdf1b56887.png)
由于存在random指针指向另一个节点,则有两种可选方式
从原链表中创建
从新链表中创建
若从原链表创建,则需要顺着当前节点的random获取到对应节点,但是random.next可能还会指向新的节点,故会造成创建出来的节点保留着对原链表节点的引用,有引用则可能会相互影响
若从新节点创建,则有可能random指向的节点尚未创建
故考虑将每个节点copy一份
为了降低空间复杂度,可考虑直接拼接到原数组上
拷贝后的原节点的next为copy节点
拷贝后的原节点的random.next即copy节点的random
实现
![](https://img.haomeiwen.com/i22517122/a077d7a5b3470e43.png)
网友评论