您的位置:首页 > 其它

LeetCode 2. 两数相加

2019-03-25 19:33 423 查看

题目描述

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

问题分析

对于创建一个新的链表的情况,先new一个dummy节点,然后new一个cur节点等于dummy。这样dummy节点用来保留链表头部的索引,cur节点用来后面进行链表的创建。两个链表对应位相加,如果有某个节点为空,那么将其值看作是0,然后将两个值加和的值/10,可得到进位值,加和的值%10,可得到当前位的结果。如此进行下去,直到两个节点同时为空。这时再检查进位,如果是1,那么还需在新链表尾部创建一个值为1的节点。

代码实现

[code]/**
* 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* dummy = new ListNode(-1);
ListNode* cur = dummy;
int val1, val2;
int carry = 0;
while(l1 || l2){
val1 = l1? l1->val : 0;
val2 = l2? l2->val : 0;
cur->next = new ListNode((val1 + val2 + carry) % 10);
cur = cur->next;
carry = (val1 + val2 + carry) / 10;
if(l1 != NULL)
l1 = l1->next;
if(l2 != NULL)
l2 = l2->next;
}
if(carry == 1)
cur->next = new ListNode(1);
return dummy->next;
}
};

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: