【LeetCode-2】 两数相加 (链表)
2018-09-10 17:31
295 查看
题目
给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
Solution 1
链表分别转成数字,做加法后再转成链表。
[code]# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def addTwoNumbers(self, l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """ def l_add(node, data): node.next = ListNode(data) tmp = node.next return tmp def l_read(data): num = 0 i = 0 while data: num = num + data.val*10**i i = i + 1 data = data.next return num a = l_read(l1) b = l_read(l2) result = a + b print(str(result)) # r = ListNode(0) for i in range(len(str(result))): tmp = int(result/10**i)%10 if i==0: r = ListNode(tmp) r1 = r else: r1 = l_add(r1, tmp) # print(str(r)) return r
结果:和的结果正确,但转成链表时出错。位数太多无法正确计算除法。
注意:
新建链表节点,返回整个链表
a1.next=a2
a2.next=a3
...
return a1
Solution 2
按位加。
[code]# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def addTwoNumbers(self, l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """ carry = 0 cnt = 0 while True: if not l1: l1=ListNode(0) if not l2: l2=ListNode(0) tmp = l1.val + l2.val + carry if tmp>=10: carry = 1 else: carry = 0 a = tmp%10 if cnt==0: r = ListNode(a) r1 = r else: r1.next = ListNode(a) r1 = r1.next cnt=cnt+1 if (l1.next==None) and (l2.next==None) and (carry==0): break l1=l1.next l2=l2.next return r
相关文章推荐
- leetcode 链表里的两数相加 C++实现
- LeetCode 02. 两数相加(链表) 03.最大不重复的字符串
- 链表:链表两数相加( LeetCode 2. Add Two Numbers(两数相加))
- LeetCode 2 两数相加(链表)
- Leetcode002--单链表两数相加
- Leetcode 第二题,两数链表相加
- leetcode 两数相加
- Leetcode(2)两数相加
- leetcode 5. 两个链表逐个元素相加 Add Two Numbers
- leetcode 1 Two sum(两数相加)
- [LeetCode] Add Two Numbers 两数相加
- LeetCode: 2_Add Two Numbers | 两个链表中的元素相加 | Medium
- LeetCode之链表数相加
- LeetCode题目C++实现:2. 两数相加
- 两数相加-链表
- LeetCode刷题记: 两数相加
- LeetCode 2. 两数相加
- LeetCode | Add Two Numbers(两个链表相加)
- LeetCode - 两数相加
- leetcode2:两数相加