2. 两数相加(中)
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
例子:
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
1、C++:
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode * res = new ListNode(0);
ListNode * p = l1;
ListNode * q = l2;
ListNode * r = res;
int c = 0;
if (l1 == nullptr && q == nullptr)
return nullptr;
else if(p == nullptr)
return l2;
else if(q == nullptr)
return l1;
while(p != nullptr && q!=nullptr){
r ->next =new ListNode(0);
r = r->next;
int s = p->val + q->val + c;
r->val = s%10;
c = s/10 ;
p = p->next;
q = q->next;
}
while(p !=nullptr){
r ->next =new ListNode(0);
r = r->next;
int s = p->val + c;
r->val = s%10;
c = s/10 ;
p = p->next;
}
while(q != nullptr){
r ->next =new ListNode(0);
r = r->next;
int s = q->val + c;
r->val = s%10;
c = s/10 ;
q = q->next;
}
if (c){ //最后需要看是不是要进位1
r->next =new ListNode(c);
}
return res->next; //res->val为0;
}
}
2、python
class Solution():
def addTwoNumbers(self, l1, l2) -> ListNode:
res = ListNode()
if (l1==None and l2 == None):
return []
elif l1 == None:
return l2
elif l2 == None:
return l1
p = l1
q = l2
r = res
c = 0
while(p!=None and q!=None):
e = ListNode((p.val+q.val+c)%10)
c = (p.val+q.val+c)//10
r.next = e
r = r.next
p = p.next
q = q.next
while(p!=None):
e = ListNode((p.val+c)%10)
c = (p.val+c)//10
r.next = e
r = r.next
p = p.next
while(q!=None):
e = ListNode((q.val+c)%10)
c = (q.val+c)//10
r.next = e
r = r.next
q = q.next
if c:
e = ListNode(c)
r.next = e
return res.next