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