2-两数相加

Posted aaahqz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2-两数相加相关的知识,希望对你有一定的参考价值。

两数相加

1.题目

LeetCode-2-两数相加

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

2.官方题解

LeetCode-2-两数相加-官方题解

初等数学

3.心得

没啥特别,就是初等数学的加法。
只不过需要考虑一下三种情况:

  • 进位
  • 链表1比链表2长
  • 链表2比链表1长
    随便写了段很丑的代码也没考虑优化,就是单纯考虑了三种情况。
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode *n1=l1,*n2=l2,*m1,*m2;
        while(n1!=NULL&&n2!=NULL)
        {
            m1=n1;
            m2=n2;
            n1->val= n1->val+n2->val;
            if(n1->val>9)
            {
                n1->val=n1->val % 10;
                if(n1->next==NULL)
                {
                    n1->next=new ListNode(1);
                }
                else
                {
                    n1->next->val++;
                }    
                
            }
            n1=n1->next;
            n2=n2->next;
        }
        if(n1==NULL)
        {
            m1->next=m2->next;
        }
        while(m1!=NULL)
        {
            if(m1->val>9)
            {
                m1->val=m1->val % 10;
                if(m1->next==NULL)
                {
                    m1->next=new ListNode(1);
                }
                else
                {
                    m1->next->val++;
                }
            }
            m1=m1->next;
        }
        return l1;
    }
};

以上是关于2-两数相加的主要内容,如果未能解决你的问题,请参考以下文章

代码题(11)— 链表两数相加

leetcode-2. 两数相加

LeetCode第2天 - 2. 两数相加

链表题--02----两数相加

LeetCode 2.两数相加

leetcode 算法题2 两数相加