-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbpNode.py
57 lines (42 loc) · 1.27 KB
/
bpNode.py
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
from copy import deepcopy
from typing import Dict, List, Optional
class Node:
def __init__(self, x: int, next: 'Node' = None, random: 'Node' = None):
self.val = int(x)
self.next = next
self.random = random
# -------------------
pass
def from_list(data: Node) -> List[List[int]]:
response = []
order: Dict[Node, int] = dict()
pos = 0
cur = data
while cur != None:
order[cur] = pos
pos += 1
cur = cur.next
cur = data
while cur != None:
response.append([cur.val, order.get(cur.random, None)])
cur = cur.next
return response
def gen_list(data: list) -> Node:
order: List[Node] = [Node(d[0]) for d in data]
resp = Node(-1)
last = resp
for i, d in enumerate(data):
cur = order[i]
cur.random = order[d[1]] if d[1] is not None else None
last.next = cur
last = cur
return resp.next
def do_test(i: int, s, r):
c = Solution()
resp = c.copyRandomList(gen_list(s))
if from_list(resp) == r:
print("OK", i)
else:
print("NOK", i, "expected", r, "response", from_list(resp))
if __name__ == "__main__":
do_test(0, [[7, None], [13, 0], [11, 4], [10, 2], [1, 0]], [[7, None], [13, 0], [11, 4], [10, 2], [1, 0]])