[LeetCode]2. Add Two Numbers
题目描述
思路
考虑链表长度不同的情况
在循环时初始化val为0,当节点存在,进行赋值更新
初始化进位carry为0,每次更新carry
循环结束后,若carry不为0,则再新建节点,连接到链表上
代码
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* head = new ListNode(0);
ListNode* iter = head;
int carry = 0;
int val1, val2;
while (l1 || l2) {
val1 = 0, val2 = 0;
if (l1) {
val1 = l1->val;
l1 = l1->next;
}
if (l2) {
val2 = l2->val;
l2 = l2->next;
}
int res_val = (val1 + val2 + carry) % 10;
carry = (val1 + val2 + carry) / 10;
ListNode* node = new ListNode(res_val);
iter->next = node;
iter = iter->next;
}
if (carry) {
ListNode* node = new ListNode(carry);
iter->next = node;
}
ListNode* res = head->next;
delete head;
iter = NULL;
return res;
}
};
int main() {
ListNode* l1 = new ListNode(2);
ListNode* l3 = new ListNode(4);
ListNode* l4 = new ListNode(3);
l1->next = l3, l3->next = l4;
ListNode* l2 = new ListNode(5);
ListNode* l5 = new ListNode(6);
ListNode* l6 = new ListNode(4);
l2->next = l5, l5->next = l6;
Solution s;
ListNode* res = s.addTwoNumbers(l1, l2);
while (res) {
cout << res->val << " ";
res = res->next;
}
cout << endl;
system("pause");
return 0;
}