要求:
请实现 copyRandomList
函数,复制一个复杂链表。
在复杂链表中,每个节点除了有一个 next
指针指向下一个节点,还有一个 random
指针指向链表中的任意节点或者 null。
思路
因为存在一个随机的指针,直接遍历一遍并不能将随机指针复制,可以使用map存储链表所有节点,key为原链表的node,value为复制后的链表的node
遍历所有节点第一遍,将map生成出来
遍历第二遍,将复制节点的随机指针和下一个元素的指针生成,key和value分别是复制前和复制后的值,所以根据value的next指针指向的就是key的next指针对应的value,value的random指针就是key的random指针对应的value
方案
/**
* Definition for a Node.
* type Node struct {
* Val int
* Next *Node
* Random *Node
* }
*/
func copyRandomList(head *Node)