每天一题LeetCode 2/365 两数相加

91 阅读1分钟

2. 两数相加

问题简单描述: 两个反序列表相加,得到一个正序列表:

输入: l1 = [2,4,3], l2 = [5,6,4]
输出: [7,0,8]
解释: 342 + 465 = 807.

思路1:将列表转化为int进行计算。 链表长度拆过int范围将溢出。

思路2:遍历两个链表,循环计算即可。 O(n^2),时间复杂度有待优化

思路3:一个循环里面判断链表长度,用临时变量缓存需否需要进位

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode pre = new ListNode();
        ListNode cur = pre;
        int carry=0;
        //判断需要需要进位
        while (l1 != null || l2 != null ||carry!=0) {
            if (l1 != null) {
                carry += l1.val;
                l1 = l1.next;
            }
            if (l2 != null) {
                carry += l2.val;
                l2 = l2.next;
            }

            cur.next = new ListNode(carry % 10);
            cur = cur.next;
            carry=carry/10;

        }
        return pre.next;
    }
}