solution about leetcode problem 2 add Two Numbers
算法1:
代码如下
class Solution:
# @param {ListNode} l1
# @param {ListNode} l2
# @return {ListNode}
def addTwoNumbers(self, l1, l2):
carryBit = 0
retList = ListNode((l1.val + l2.val)%10)
if l1.val + l2.val >= 10:
carryBit = 1
tmp = retList
while(l1.next or l2.next):
sumToList = 0
if l1.next:
sumToList += l1.next.val
l1 = l1.next
if l2.next:
sumToList += l2.next.val
l2 = l2.next
sumToList += carryBit
tmp.next = ListNode(sumToList % 10)
if sumToList >= 10:
carryBit = 1
else:
carryBit = 0
tmp = tmp.next
if carryBit == 1:
tmp.next = ListNode(1)
return retList
C语言版的
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
struct ListNode * retList = (struct ListNode* ) malloc(sizeof(struct ListNode));
int sumToAdd = l1->val + l2->val;
struct ListNode * tmp = retList;
int carryBit = sumToAdd>=10?1:0;
tmp->val = sumToAdd % 10;
while(l1->next || l2->next){
sumToAdd = 0;
if(l1->next){
sumToAdd += l1->next->val;
l1 = l1->next;
}
if(l2->next){
sumToAdd += l2->next->val;
l2 = l2->next;
}
sumToAdd += carryBit;
tmp->next = (struct ListNode* ) malloc(sizeof(struct ListNode));
tmp = tmp->next;
tmp->val = sumToAdd % 10;
printf("%d", tmp->val);
tmp->next = NULL;
carryBit = sumToAdd>=10?1:0;
}
if(carryBit){
tmp->next = (struct ListNode* ) malloc(sizeof(struct ListNode));
tmp = tmp->next;
tmp->val = 1;
tmp->next = NULL;
}
return retList;
}
算法思路:
大体就是遍历两个列表,然后一个个加起来就是了,算法很简单!
算法2:
代码如下
class Solution:
# @param {ListNode} l1
# @param {ListNode} l2
# @return {ListNode}
def list2Number(self, listnode):
a = listnode.val
power = 10
while(listnode.next):
a = a + listnode.next.val * power
power *= 10
listnode = listnode.next
return a
def number2List(self, num):
ret = ListNode(num % 10)
tmp = ret
num /= 10
while(num):
tmp.next = ListNode(num % 10)
tmp = tmp.next
num /= 10
return ret
def addTwoNumbers(self, l1, l2):
num1 = self.list2Number(l1)
num2 = self.list2Number(l2)
sum = num1 + num2
return self.number2List(sum)
算法思路:
先把列表转换成数字,Python在运算大数方面具有天然优势,计算出来两个数字的和,然后转换成列表,返回就好了!