public static int equalStacks(List h1, List h2, List h3) { Stack s1 = new Stack<>(); Stack s2 = new Stack<>(); Stack s3 = new Stack<>(); sumStack(s1, h1); sumStack(s2, h2); sumStack(s3, h3); while (true) { int sum1 = s1.peek(); int sum2 = s2.peek(); int sum3 = s3.peek(); if(s1.size() == 0 || s2.size() == 0 || s3.size() == 0) { return 0; } if( (sum1 == sum2) && (sum1 == sum3)) { return sum1; } Integer minimum = Math.min(sum1, Math.min(sum2, sum3)); while(sum1 > minimum) { s1.pop(); sum1 -= h1.remove(0); } if(s1.isEmpty()) { return 0; } while(sum2 > minimum) { s2.pop(); sum2 -= h2.remove(0); } if(s2.isEmpty()) { return 0; } while(sum3 > minimum) { s3.pop(); sum3 -= h3.remove(0); } if(s3.isEmpty()) { return 0; } } } public static void sumStack(Stack s, List list) { int sum = 0; for (int i = list.size() - 1; i >= 0 ; i--) { Integer currentElement = list.get(i); sum += currentElement; s.push(sum); } }