概述
C++版
/**
* Add Two Numbers
* 两数相加
*/
class Solution
{
public:
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2)
{
int x=0, y=0, carry=0, sum=0;
ListNode *h=NULL, **t=&h;
while (l1!=NULL || l2!=NULL)
{
x = getValueAndMoveNext(l1);
y = getValueAndMoveNext(l2);
sum = carry + x + y;
ListNode *node = new ListNode(sum%10);
*t = node;
t = (&node->next);
carry = sum/10;
}
if (carry > 0)
{
ListNode *node = new ListNode(carry%10);
*t = node;
}
return h;
}
private:
int getValueAndMoveNext(ListNode* &l)
{
int x = 0;
if (l != NULL)
{
x = l->val;
l = l->next;
}
return x;
}
};
Python版
/**
* Add Two Numbers
* 两数相加
*/
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
# maybe standard version
def _addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
p = dummy = ListNode(-1)
carry = 0
while l1 and l2:
p.next = ListNode(l1.val + l2.val + carry)
carry = p.next.val / 10
p.next.val %= 10
p = p.next
l1 = l1.next
l2 = l2.next
res = l1 or l2
while res:
p.next = ListNode(res.val + carry)
carry = p.next.val / 10
p.next.val %= 10
p = p.next
res = res.next
if carry:
p.next = ListNode(1)
return dummy.next
# shorter version
def addTwoNumbers(self, l1, l2):
p = dummy = ListNode(-1)
carry = 0
while l1 or l2 or carry:
val = (l1 and l1.val or 0) + (l2 and l2.val or 0) + carry
carry = val / 10
p.next = ListNode(val % 10)
l1 = l1 and l1.next
l2 = l2 and l2.next
p = p.next
return dummy.next
最后
以上就是留胡子舞蹈为你收集整理的leetcode-链表-2.两数相加的全部内容,希望文章能够帮你解决leetcode-链表-2.两数相加所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复