1. 题目
给定两个非空链表,表示两个非负整数。
数字以相反的顺序存储,每个节点都包含一个数字,将两个数相加,以链表形式返回。
假定两个数字不包含任何前导零,除了数字0本身。
2. 分析
思路很明确,按照位数相加,维护当前位和进位即可
int n1 = l1 != NULL ? l1->val : 0;
int n2 = l2 != NULL ? l2->val : 0;
int sum = n1 + n2 + carry;
注意判断l1与l2是否为空,计算sum的值记得加上carry,否则会出错
3. 代码
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode dummy(-1);
ListNode *cur = &dummy;
int carry = 0;
while(l1 != NULL || l2 != NULL)
{
int n1 = l1 != NULL ? l1->val : 0;
int n2 = l2 != NULL ? l2->val : 0;
int sum = n1 + n2 + carry;
carry = sum / 10;
cur->next = new ListNode(sum % 10);
cur = cur->next;
if(l1 != NULL)
l1 = l1->next;
if(l2 != NULL)
l2 = l2->next;
}
if(carry != 0)
cur->next = new ListNode(1);
return dummy.next;
}
};