2-两数相加
Posted aaahqz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2-两数相加相关的知识,希望对你有一定的参考价值。
两数相加
1.题目
给出两个?非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照?逆序?的方式存储的,并且它们的每个节点只能存储?一位?数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0?开头。
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-两数相加的主要内容,如果未能解决你的问题,请参考以下文章