import scala.collection.mutable
import scala.collection.mutable.HashMap
object Main {
class Node(var prod:Int, var next:Node = null, var related:Node=null) {
}
var visited = new mutable.HashMap[Node, Node]()
def copyProductRelations(head: Node): Node = {
if (head == null)
return null
var oldNode = head
var newNode = new Node(oldNode.prod)
visited.put(oldNode, newNode)
while ( {
oldNode != null
}) {
newNode.related = getClonedNode(oldNode.related)
newNode.next = getClonedNode(oldNode.next)
oldNode = oldNode.next
newNode = newNode.next
}
visited(head)
}
def getClonedNode(node: Node): Node = {
if (node != null) if (visited.contains(node)) {
return visited(node)
}
else {
visited.put(node, new Node(node.prod, null, null))
return visited(node)
}
null
}
def printList(products:Node):Unit={
var pro:Node = products
while(pro != null){
print("(prod=")
print(pro.prod )
if(pro.related==null){
print(", related="+ -1)
}
else
{
print(", related="+ pro.related.prod)
}
print(")")
pro = pro.next
if(pro!=null)
print(" => ")
}
println()
}
def createList(values:Array[Int], pointers:Array[Int]):Node={
var head:Node = new Node(values(0))
var iter = head
var i =1
while(i<values.size) {
iter.next = new Node(values(i))
iter = iter.next
i += 1
}
iter = head
i = 0
while(i<pointers.size){
if(pointers(i) != -1) {
val related = pointers(i)
var j = 0
var aux = head
while(j<related){
aux = aux.next
j += 1
}
iter.related = aux
}
iter = iter.next
i += 1
}
return head
}