criskgl
9/26/2019 - 7:16 PM

Add two numbers (LISTS)

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    //edge cases
    if(l1 == null) return l2;
    if(l2 == null) return l1;
    if(l1.next == null && l1.val == 0) return l2;
    if(l2.next == null && l2.val == 0) return l1;
    //build first nodes for final list
    // [PREV]-->NULL
    //   ^
    //   |
    //   |
    // prevHead: pointer to save pointer to beginning of our result list
    ListNode prev = new ListNode(-1);//start as a prehead
    ListNode prevHead = prev;
    
    boolean remainderExists = false;
    int remainder = 0;//This will only be between 0-9
    while(l1 != null || l2 != null || remainderExists){// if we finish any of the numbers stop
        //Store operable data
        int val1 = (l1 != null) ? l1.val : 0;
        int val2 = (l2 != null) ? l2.val : 0;
        int totalSum = 0;
        if(remainderExists) totalSum = val1 + val2 + 1;
        else totalSum = val1 + val2;
        
        //Build new node to append to result list
        ListNode newNode = new ListNode(-1);
        if(totalSum <= 9){//no remainder created
            remainderExists = false;
            newNode.val = totalSum;
            prev.next = newNode;
            prev = newNode;
        }else{//remainder created
            remainderExists = true;
            //take away remainder from sum
            totalSum -= 10;
            newNode.val = totalSum;
            prev.next = newNode;
            prev = newNode;
        }
        //STEP in both l1 & l2
        if(l1 != null) l1 = l1.next;
        if(l2 != null) l2 = l2.next;
    }
    return prevHead.next;
}