链接
Add Two Numbers | LeetCode OJ描述
有两个代表非负整数的非空单链表,链表的每一个结点代表一个十进制位,反向存储的。把这两个数字相加,并反其结果。
提示
除了数值 0 以外,不用考虑有前导 0 的情况。
举例
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8
思路
由于十进制位是逆序保存在链表中的,所以顺序遍历链表正好得到个位、十位、百位……,正好方便从低位开始相加。唯一需要注意的就是高位不存在的情况。题目本身是很简单的。
代码
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) { ListNode* phead = NULL; ListNode* prev = NULL; bool carry = false; for(;;){ int sum = int(carry); if(l1) sum += l1->val; if(l2) sum += l2->val; carry = sum >= 10; if(carry) sum -= 10; ListNode* pcur = new ListNode(sum); if(prev == NULL){ prev = pcur; phead = pcur; } else{ prev->next = pcur; prev = pcur; } if(l1) l1 = l1->next; if(l2) l2 = l2->next; if(!l1 && !l2){ break; } } if(carry){ ListNode* pa = new ListNode(1); prev->next = pa; pa->next = NULL; prev = pa; } prev->next= NULL; return phead; } };