Nested Integer

public class NestedListOfIntegers {
    int sum(List<Object> nestedlist) {
        return sum(nestedlist, 1);
    }

    @SuppressWarnings("unchecked")
    int sum(List<Object> nestedlist, int level) {
        int sum = 0;
        for (Object o : nestedlist) {
            if (o instanceof Integer)
                sum += (Integer) o * level;
            else if (o instanceof List)
                sum += sum((List<Object>) o, level + 1);
        }
        return sum;
    }
}

Follow up:

Reversed Nested Integer

int calWeightedSum(MyNestedInteger ni) {
    if(ni == null) {
        return 0;
    }
    else {
        if(ni.isInteger()) {
            return ni.getInteger()
        } else {
            int depth = ni.getDepth(ni.getList());
            getListSum(ni.getList(), depth);
        }
    }
}

int getListSum(List<MyNestedInteger> li, int curDepth) {
    int ret = 0;
    for(MyNestedInteger ni : li) {
        if(ni.isInteger()) {
            ret += ni.getInteger() * curDepth;
        } else {
            ret += getListSum(ni.getList(), curDepth-1);
        }
    }
    return ret;
}

int getDepth(List<MyNestedInteger> li) {
    int greatestDepth = 0;
    for(MyNestedInteger ni : li) {
        if(ni.isInteger()) {
            if(greatestDepth < 1) {
                greatestDepth = 1;
            } 
        } else {
            int d = getDepth(li.getList());
            if(greatestDepth < d){
                greatestDepth = d;
            }
        }
    }
    return greatestDepth;
}