1. 题目
给定两个非空链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
进阶:
如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。
示例:输入: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
输出: 7 -> 8 -> 0 -> 7
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 先将链表转成字符串,对齐两个字符串(短的前面加 ‘0’ )
- 用字符串加法,得到新的字符串
- 把新的字符串输出链表
class Solution {
public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {string n1, n2, s;//链表转字符串while(l1 && l2){n1.push_back(l1->val+'0');l1 = l1->next;n2.push_back(l2->val+'0');l2 = l2->next;}if(l1)while(l1){n1.push_back(l1->val+'0');l1 = l1->next;n2.insert(0,"0");}if(l2)while(l2){n2.push_back(l2->val+'0');l2 = l2->next;n1.insert(0,"0");}//字符串大数加法int i, bit, carry = 0, sum;for(i = n1.size()-1; i >= 0; --i){sum = n1[i]-'0'+n2[i]-'0'+carry;bit = sum%10;carry = sum/10;s.push_back(bit+'0');}if(carry)s.push_back(carry+'0');//低位在前//字符串输出链表ListNode *head = NULL, *node;for(i = 0; i < s.size(); ++i){node = new ListNode(s[i]-'0');node->next = head;head = node;}return head;}
};