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.element); c = c.prev; } ret l; } }