static LinkedListNode addReverse(LinkedListNode a, LinkedListNode b) {
        LinkedListNode resultHead = null;
        LinkedListNode resultTail = null;
        boolean hasCarrier = false;
        int tmp, tmpa, tmpb;
        while (a != null || b != null) {
            if (a != null) {
                tmpa = a.getValue();
                a = a.next;
            } else {
                tmpa = 0;
            }
            if (b != null) {
                tmpb = b.getValue();
                b = b.next;
            } else {
                tmpb = 0;
            }
            tmp = tmpa + tmpb;
            if (hasCarrier) tmp += 1;
            if (tmp >= 10) {
                hasCarrier = true;
                tmp = tmp%10;
            } else {
                hasCarrier = false;
            }

            if (resultHead == null) {
                resultHead = new LinkedListNode(tmp, null, null);
                resultTail = resultHead;
            } else {
                resultTail.next = new LinkedListNode(tmp, null, null);
                resultTail = resultTail.next;
            }
        }

        if (hasCarrier) {
            resultTail.next = new LinkedListNode(1, null, null);
        }
        return resultHead;
    }