
给定两个非空链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
进阶:
如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。
示例:
输入: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
输出: 7 -> 8 -> 0 -> 7来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/add-two-numbers-ii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
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;
}
};