static L> combineZigZag(L l1, L l2) { int lA = l(l1), lB = l(l2), maxSum = max(lA, lB); L> out = new L; int ndiags = lA + lB - 1; for diag to ndiags: { int row_stop = max(0, diag - lA + 1); int row_start = min(diag, lB - 1); for (int row = row_start; row >= row_stop; row--) { // on a given diagonal row + col = constant "diag" // diag labels the diagonal number int col = diag - row; out.add(pair(l1.get(col), l2.get(row))); } } ret out; }