1 /**
2 * Definition for singly-linked list.
3 * struct ListNode {
4 * int val;
5 * ListNode *next;
6 * ListNode(int x) : val(x), next(NULL) {}
7 * };
8 */
9 class Solution {
10 public:
11 ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
12 //定义一个新链表res,一个temp的链表cur,用来当作res的指针,一个进位标志carry
13 ListNode *res = new ListNode(-1);
14 ListNode *cur = res;
15 int carry = 0;
16 while(l1 != NULL || l2 != NULL){
17 //取到两个链表当前的数值
18 int num1 = l1 == NULL ? 0 : l1->val;
19 int num2 = l2 == NULL ? 0 : l2->val;
20 //求和
21 int sum = num1 + num2 + carry;
22 //对进位标志的验证
23 carry = sum >= 10 ? 1 : 0;
24 cur->next = new ListNode(sum % 10);
25 cur = cur->next;
26 l1 = l1 ? l1->next : l1;
27 l2 = l2 ? l2->next : l2;
28 }
29 if (carry == 1) {
30 cur->next = new ListNode(1);
31 }
32 return res->next;
33 }
34 };