-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path138. 复制带随机指针的链表.scala
58 lines (48 loc) · 1.62 KB
/
138. 复制带随机指针的链表.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// 给定一个链表,每个节点包含一个额外增加的随机指针,
// 该指针可以指向链表中的任何节点或空节点。
// 要求返回这个链表的 深拷贝。
// 我们用一个由 n 个节点组成的链表来表示输入/输出中的链表。
// 每个节点用一个 [val, random_index] 表示:
// val:一个表示 Node.val 的整数。
// random_index:随机指针指向的节点索引(范围从 0 到 n-1);
// 如果不指向任何节点,则为 null 。
//
// 示例 1:
// 输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]
// 输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]
// 示例 2:
// 输入:head = [[1,1],[2,1]]
// 输出:[[1,1],[2,1]]
// 示例 3:
// 输入:head = [[3,null],[3,0],[3,null]]
// 输出:[[3,null],[3,0],[3,null]]
// 示例 4:
// 输入:head = []
// 输出:[]
// 解释:给定的链表为空(空指针),因此返回 null。
// 提示:
// -10000 <= Node.val <= 10000
// Node.random 为空(null)或指向链表中的节点。
// 节点数目不超过 1000 。
import scala.collection.mutable
object Solution {
private val created = mutable.Map[Node, Node]()
def copyRandomList(head: Node): Node = {
if (head == null) null
else if (created contains head)
created(head)
else {
val node = new Node(head.value)
created(head) = node
node.next = copyRandomList(head.next)
node.random = copyRandomList(head.random)
node
}
}
// Definition for a Node.
class Node(var _value: Int) {
var value: Int = _value
var next: Node = null
var random: Node = null
}
}