题目链接
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
初次分析
依次查找对应位数字并相加,注意NULL情况并计算的进位,循环直至结束。
实现
C++代码段如下.
class Solution {
private:
int gadget(ListNode* &l){
int x = 0;
if(l != NULL){
x = l->val;
l = l->next;
}
return x;
}
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
int x=0, y=0, carry=0, sum=0; //carry 即进位
ListNode *h = NULL, **t=&h;
while(l1 != NULL || l2!= NULL)
{
x = gadget(l1);
y = gadget(l2);
sum = x + y + carry;
ListNode *node = new ListNode(sum%10);
*t = node;
t = (&node->next);
carry = sum/10;
}
if(carry > 0){
ListNode *node = new ListNode(carry%10);
*t = node;
}
return h;
}
};
执行结果
写在后面
省略了大量的细节,没有完成算法分析和优化,参考列表也未列出?
原因(借口)
累了(GitHub建博客心态崩了)
刚开学事情多(赶进度)
… … …
总之,这是50题博客的第一篇…的第一版,先到这里。