struct ListNode {
int val;
ListNode* next;
ListNode() : val(0), next(nullptr) {}
ListNode(int x) : val(x), next(nullptr) {}
ListNode(int x, ListNode* next) : val(x), next(next) {} // 初始化时可以使用:该方式将x和next赋值给val和next
};
//main函数
ListNode* l3 = new ListNode(12); // new ListNode()c++使用new创建一个对象时必须用指针接收
ListNode vHead(0);
ListNode p = &vHead; //同等于l3的定义
cout << vHead.val << endl; // 0
cout << p->val << endl; // 0
ListNode l1 = new ListNode(2);
ListNode* l2 = new ListNode(4);
ListNode* l3 = new ListNode(3);
l1->next = l2;
l2->next = l3;
ListNode* l4 = new ListNode(5);
ListNode* l5 = new ListNode(6);
ListNode* l6 = new ListNode(4);
l4->next = l5;
l5->next = l6;
ListNode*res = addTwoNumbers(l1, l4);
cout << res->val << endl;
cout << res->next->val << endl;
cout << res->next->next->val << endl;
// methods
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode vHead(0), * p = &vHead;
int flag = 0;
int count = 1; // 次数
while (l1 || l2 || flag) {
int tmp = 0;
if (l1 != nullptr) tmp += l1->val;
if (l2 != nullptr) tmp += l2->val;
tmp += flag;
flag = tmp / 10; // 进一位的值
tmp %= 10; // 余数,当前位的值
ListNode* next = l1 ? l1 : l2;//如果l1或者l2有一个不是空指针,可以减少创建NodeList对象的过程,减少执行用时
//next的next会被下一次循环给val赋值时覆盖
if (next == nullptr) next = new ListNode(tmp);
next->val = tmp;
p->next = next;
p = p->next;
l1 = l1 ? l1->next : nullptr;
l2 = l2 ? l2->next : nullptr;
count += 1;
}
return vHead.next;
}