码迷,mamicode.com
首页 > 其他好文 > 详细

2-两数相加

时间:2019-12-30 00:18:57      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:表示   linked   problem   node   ems   block   除了   amp   ret   

两数相加

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-两数相加

标签:表示   linked   problem   node   ems   block   除了   amp   ret   

原文地址:https://www.cnblogs.com/AAAHQZ/p/12116838.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!