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