leetcode_2. 两数相加
【摘要】 目录
一、题目内容
二、解题思路
三、代码
一、题目内容
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都...
目录
一、题目内容
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
二、解题思路
1.判断两数相加是否进位,若进位则不删除尾结点,不进位则删除;
2.进位需要新建节点val为1,不进位则val为0;
3.没有高位即指针指向空则加0;
三、代码
-
class ListNode(object):
-
def __init__(self, x):
-
self.val = x
-
self.next = None
-
-
def __repr__(self):
-
val_str = ''
-
p = self
-
while p:
-
val_str += str(p.val)
-
p = p.next
-
return val_str[::-1]
-
-
-
class Solution(object):
-
def addTwoNumbers(self, l1, l2):
-
"""
-
:type l1: ListNode
-
:type l2: ListNode
-
:rtype: ListNode
-
"""
-
head = ListNode(0)
-
# print(head.val, head.next)
-
p = head
-
q = p
-
carry = 0
-
while l1 or l2:
-
-
if l1 is not None:
-
l1_val = l1.val
-
# print("l1:", l1_val)
-
else:
-
l1_val = 0
-
if l2 is not None:
-
l2_val = l2.val
-
# print("l2:", l2_val)
-
else:
-
l2_val = 0
-
temp = l1_val + l2_val + carry
-
if temp >= 10:
-
carry = 1
-
p.val = temp - 10
-
p.next = ListNode(1)
-
else:
-
carry = 0
-
p.val = temp
-
p.next = ListNode(0)
-
q = p
-
p = p.next
-
if l1 is not None:
-
l1 = l1.next
-
if l2 is not None:
-
l2 = l2.next
-
if q.next.val == 0:
-
q.next = None
-
del p
-
return head
-
-
if __name__ == '__main__':
-
l1 = ListNode(2)
-
l1.next = ListNode(4)
-
l1.next.next = ListNode(3)
-
l2 = ListNode(5)
-
l2.next = ListNode(6)
-
l2.next.next = ListNode(4)
-
s = Solution()
-
ans = s.addTwoNumbers(l1, l2)
-
print(ans)
文章来源: nickhuang1996.blog.csdn.net,作者:悲恋花丶无心之人,版权归原作者所有,如需转载,请联系作者。
原文链接:nickhuang1996.blog.csdn.net/article/details/110231520
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)