class Node implements Cloneable {
private int val
private int i
private Node prev
private Node next
private static Node head
private static Node last
Node(int val, int i = 0) {
if (!head) head = this
if (!last) last = this
this.i = i
this.val = val
}
Integer at(int x, Node node = this) {
//println "" + x + node.i + node.next
if (x > node.i) {
if (node.next != null)
return this.at(x, node.next)
else
return null
}
return node.val
}
Node add(int val) {
Node newNode = new Node(val, last.i + 1)
newNode.prev = last
last.next = newNode
last = newNode
//println "---\nadd done\n---"
return head
}
Node reverse() {
Node r = last.clone()
Node prev = last.prev
while (prev != null) {
r.add(prev.val)
prev = prev.prev
}
return r
}
}
Node list = new Node(1)
assert list.at(0) == 1
list.add(4).add(6) // chained adding
assert list.at(0) == 1
assert list.at(1) == 4
assert list.at(2) == 6
assert list.at(3) == null
assert list.reverse().at(0) == list.at(2)
Thursday, May 29, 2014
Simple Linked List
Labels:
linkedlist,
list
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment