美文网首页
2.两数相加

2.两数相加

作者: su945 | 来源:发表于2020-06-22 21:55 被阅读0次

    题目描述

    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
    如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
    您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

    问题分析

    • 一个是对齐的思路,就是两个链表长度相同,然后逐次相加记录进位情况
    • 不对齐思路,直接判断两个链表哪个首先会为空

    解题思路1

    class Solution {
    public:
        ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
            ListNode* head = new ListNode(-1);//存放结果的链表
            ListNode* h = head;//移动指针
            int sum = 0;//每个位的加和结果
            bool carry = false;//进位标志
            while (l1 != NULL || l2 != NULL)
            {
                sum = 0;
                if (l1 != NULL)
                {
                    sum += l1->val;
                    l1 = l1->next;
                }
                if (l2 != NULL)
                {
                    sum += l2->val;
                    l2 = l2->next;
                }
                if (carry)
                    sum++;
                h->next = new ListNode(sum % 10);
                h = h->next;
                carry = sum >= 10 ? true : false;
            }
            if (carry)
            {
                h->next = new ListNode(1);
            }
            return head->next;
        }
    };
    

    相关文章

      网友评论

          本文标题:2.两数相加

          本文链接:https://www.haomeiwen.com/subject/pciffktx.html