'LinkedList Add Two Numbers: LeetCode

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

The linked list seems to be overwriting the nodes as far as I can tell. I did find the answer to this problem on GeeksforGeeks but I wanted help with figuring out what is wrong with my code. I also know my code is not the best in regards to optimization but any halp is accepted. Thanks!

/**
 * 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 {
        //ListNode head;
        public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            int x = 0;
            int y = 0;
            int z = 1;
    
            while(l1 != null){
                x += z*l1.val;
                z*=10;
                l1 = l1.next;
            }
          
            z = 1;
            while(l2 != null){
                y += z*l2.val;
                z*=10;
                l2 = l2.next;
            }
    
            int sum = x + y;
            ListNode node = new ListNode(0);
            
            while(sum > 0){
                int digit = sum % 10;
                ListNode n = new ListNode(digit);
                while(node.next != null){
                    node = node.next;
                }
                node.next = n;
                
                sum = sum / 10;
    
                
            }      
            return node;
    
        }
    }

LeetCode Question



Solution 1:[1]

I like your solution but you have bit incomplete logic.

class Solution {
    //ListNode head;
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        int x = 0;
        int y = 0;
        int z = 1;

        while(l1 != null){
            x += z*l1.val;
            z*=10;
            l1 = l1.next;
        }

        z = 1;
        while(l2 != null){
            y += z*l2.val;
            z*=10;
            l2 = l2.next;
        }

        int sum = x + y;
        if (sum == 0) {
            return new ListNode(0);
        }

        ListNode node = null, head = null;
        while(sum > 0){
            int digit = sum % 10;
            ListNode n = new ListNode(digit);
            if (node == null) {
                head = node = n;
            } else {
                node.next = n;
                node = node.next;
            }
            
            sum = sum / 10;
        }

        return head;
    }
}

I just changed one or two things after int sum = x + y;

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Alibek Taalaibek Uulu