2. 两数相加
2018-03-18 20:47
176 查看
给定两个非空链表来代表两个非负数,位数按照逆序方式存储,它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807
/** * 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 *ans = new ListNode(0); //答案串 ListNode *head = ans;//记录一下答案串的首地址 int pos = 0; //标记进位 while (l1 && l2) {//现将相同的位置加上 int cnt = l1 -> val + l2 -> val + pos; pos = cnt > 9 ? 1 : 0; ans -> val = cnt % 10; l1 = l1 -> next; l2 = l2 -> next; if (l1 && l2) { ans -> next = new ListNode(0); ans = ans -> next; } else { break; } } // 然后处理后边的数此时ans不是空的,而是指向最后一个节点 if (l1 == NULL && l2 == NULL) {//加完了 if (pos) { ans -> next = new ListNode(0); ans = ans -> next; ans -> val = pos; } } else if (l1 == NULL) {//第一个链表用完了 while (l2) {//用完 ans -> next = new ListNode(0); ans = ans -> next; int cnt = l2 -> val + pos; pos = cnt > 9 ? 1 : 0; ans -> val = cnt % 10; l2 = l2 -> next; } if (pos) { ans -> next = new ListNode(0); ans = ans -> next; ans -> val = pos; } } else if (l2 == NULL) { while (l1) {//用完 ans -> next = new ListNode(0); ans = ans -> next; int cnt = l1 -> val + pos; pos = cnt > 9 ? 1 : 0; ans -> val = cnt % 10; l1 = l1 -> next; } if (pos) { ans -> next = new ListNode(0); ans = ans -> next; ans -> val = pos; } } ans = head; return ans; } };
相关文章推荐
- 实现一个add()函数-两数相加(不能使用四则运算以及++--)
- 1.计算两数相加,不使用加号(+)问题。
- leet2. 两数相加
- 不用加减乘除完成两数相加
- XMLHttpRequest 实现两数相加
- c语言判断两数相加是否溢出
- TwoSum:两数相加得0
- 程序猿之---C语言细节20(符号和有符号之间转换、两数相加溢出后数值计算)
- 我的第三个java程序 两数相加
- 链表:两数相加
- 2. Add Two Numbers(两数相加)
- VBS 两数相加取值问题分析
- 算法:两数相加
- LeetCode 2. Add Two Numbers(两数相加)
- 两数相加
- JavaScript两数相加(踩坑)记录
- 从零打卡leetcode之day 2---两数相加
- 两数相加问题
- [CareerCup] 18.1 Add Two Numbers 两数相加
- LeetCode 2. 两数相加