[LeetCode] 2. Add Two Numbers


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.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8


</br>

Solution

The main issue here is to consider that the sum of two number may overflow, which is to say the sum is above 10; therefore, we have to carry the 10 to the next digit. And the maximum possible sum of the two numbers can be 19, so the carry can be either 1 or 0.

Other than that, we only have to take care of the pointer and watch out some special cases like empty lists, different length and possible extra carry to the end.

The code is shown as below.

Java

public class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        
        ListNode dummy = new ListNode(0);
        ListNode p=l1,q=l2,curr=dummy;
        
        int carry = 0;
        
        while(p != null || q !=null)
        {
            int x = p != null ? p.val:0;
            int y = q != null ? q.val:0;
            
            int sum = x+y+carry;
            carry = sum / 10;
            
            curr.next = new ListNode(sum % 10);
            if(p!=null) p = p.next;
            if(q!=null) q = q.next;
            curr = curr.next;
            
        }
        
        if(carry >0){
            
            curr.next = new ListNode(carry);
        }
        return dummy.next;
        
    }
}

</br>

Complexity Analysis

Time Complexity: O(n).
Space Complexity: O(n). For the creation of the new list.
</br>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容