sclass Chain {
A element;
Chain prev;
int size;
*() {}
*(Chain *prev, A *element) {
size = prev != null ? prev.size+1 : 1;
}
toString {
ret prev == null ;
}
L toList() {
L l = emptyList(size);
int i = size;
Chain c = this;
while (c != null) {
l.set(--i, c);
c = c.prev;
}
ret l;
}
}