Q16 Add Two Numbers II - LeetCode

PHOTO EMBED

Tue Jan 17 2023 05:57:17 GMT+0000 (Coordinated Universal Time)

Saved by @Ayush_dabas07

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    
    public ListNode reverse(ListNode head)
    {
        ListNode prev = null;
        ListNode next = null;
        ListNode current = head;
        
        
        while(current != null){
            next = current.next;
            current.next = prev ;
            
            prev = current;
            current = next;
        }
        return prev;
    }

    
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        
        
        //reverse the ll
        ListNode curr1 = reverse(l1);
        ListNode curr2 = reverse(l2);

        //make a dummy head for answer LL
        ListNode dummyhead = new ListNode(-1);
        ListNode dummy = dummyhead;

        int carry  = 0;

        //add two numbers like normal 
        while(curr1 != null && curr2 != null){
            int val = curr1.val + curr2.val + carry ;
            
            carry = val/10;
            val = val%10;

            ListNode temp = new ListNode(val);
            dummy.next = temp;
            
            
            dummy = dummy.next;
            curr1 = curr1.next;
            curr2 = curr2.next;
        }

//if one LL ends add the rest of the number of the other LL along with carry 
        while(curr1 != null){
             int val = curr1.val + carry ;
            
            carry = val/10;
            val = val%10;

            ListNode temp = new ListNode(val) ;
            dummy.next = temp;

            dummy = dummy.next;
            curr1 = curr1.next;
        }
        while(curr2 != null){
             int val = curr2.val + carry ;
            
            carry = val/10;
            val = val%10;

            ListNode temp = new ListNode(val) ;
            dummy.next = temp;

            dummy = dummy.next;
            curr2 = curr2.next;
        }

//if all numbers are done and still any carry remains make a new node and add to the LL
        if(carry >0){
            ListNode temp = new ListNode(carry) ;
            dummy.next = temp;

            dummy = dummy.next;
        }

//re-reverse the final answer LL
        return reverse(dummyhead.next);
    }
}
















content_copyCOPY

https://leetcode.com/problems/add-two-numbers-ii/