138.M 随机链表的复制

Problem: 138. 随机链表的复制arrow-up-right

思路

思路1:用一个map存储新旧节点的映射关系。第一步先复制节点,第二步把新节点的next和random指针指向正确的位置。

思路2:先复制节点,让旧节点指向复制后的新节点。然后把新节点的random指针指向正确的位置。最后再把两个链表拆开。

Code

代码1:

func copyRandomListV1(head *Node) *Node {
	nodeMap := make(map[*Node]*Node)
	p := head
	for p != nil {
		nodeMap[p] = &Node{Val: p.Val}
		p = p.Next
	}

	p = head
	for p != nil {
		nodeMap[p].Next = nodeMap[p.Next]
		nodeMap[p].Random = nodeMap[p.Random]
		p = p.Next
	}

	return nodeMap[head]
}

代码2:

Last updated