static L> combineZigZag(L l1, L l2) { int lA = l(l1), lB = l(l2), maxSum = lA+lB; assertEquals("lists length", lA, lB); L> out = new L; for sum to maxSum: { int maxA = min(lA, sum); for iA to maxA: out.add(pair(l1.get(iA), l2.get(sum-1-iA))); } ret out; }