题目
给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
如
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
这道题比较简单,不需要什么特殊的算法,因为它把个位放在了链头,十位放在了链表第二位,以此类推。所以我们对着链表中的每一位直接相加即可
代码
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* re = new ListNode(0);
ListNode* next = re;
int b = 0; // 两数相加,若大于10,则进位
int sum;
while (l1 != null || l2 != NULL) {
int x = l1 != NULL ? l1 -> val : 0;
int y = l2 != NULL ? l2 -> val : 0;
sum = (x + y + b);
next -> next = new ListNode(sum % 10);
b = sum / 10;
next = next -> next;
if (l1 != NULL) l1 = l1 -> next;
if (l2 != NULL) l2 = l2 -> next;
}
if (b != 0) {
next -> next = new ListNode(b);
}
return re -> next;
}