LeetCode 2. 两数相加

    技术2022-07-10  98

    目录结构

    1.题目

    2.题解 


    1.题目

    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序的方式存储的,并且它们的每个节点只能存储 一位数字。

    如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

    您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

    示例:

    输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/add-two-numbers 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    2.题解 

    两个链表同步进行遍历,每一位计算的同时记录是否进位,进位值将加到下一位运算结果中。

    当其中一个链表遍历完毕,还需检查另一个是否遍历完毕,同样考虑进位问题。

    public class Solution2 { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode result = new ListNode(0); ListNode p = result; int flag = 0, sum; while (l1 != null && l2 != null) { sum = l1.val + l2.val + flag; if (sum >= 10) { flag = 1; sum -= 10; } else { flag = 0; } p.next = new ListNode(sum); p = p.next; l1 = l1.next; l2 = l2.next; } while (l1 != null) { sum = l1.val + flag; if (sum >= 10) { flag = 1; sum -= 10; } else { flag = 0; } p.next = new ListNode(sum); p = p.next; l1 = l1.next; } while (l2 != null) { sum = l2.val + flag; if (sum >= 10) { flag = 1; sum -= 10; } else { flag = 0; } p.next = new ListNode(sum); p = p.next; l2 = l2.next; } if (flag == 1) { p.next = new ListNode(1); p = p.next; } p.next = null; return result.next; } } 时间复杂度:空间复杂度:​​​​​​​
    Processed: 0.015, SQL: 9