+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2020-05(18)

2020-06(26)

2020-07(30)

2020-08(39)

2020-09(63)

2. 两数相加-python

发布于2021-04-26 00:26     阅读(242)     评论(0)     点赞(20)     收藏(1)


0

1

2

3

4

5

6

7

8

9

  1. from typing import *
  2. # Definition for singly-linked list.
  3. class ListNode:
  4. def __init__(self, val=0, next=None):
  5. self.val = val
  6. self.next = next
  7. class Solution:
  8. def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
  9. # 首先创建一个虚拟节点,并创建一个current指针,指向这个节点
  10. current = dummy = ListNode()
  11. # 初始化carry和两个链表对应节点相加的值
  12. carry, value = 0, 0
  13. # 下面的while循环中之所以有carry,是为了处理两个链表最后节点相加出现进位的情况
  14. # 当两个节点都走完而且最后的运算并没有进位时,就不会进入这个循环
  15. while carry or l1 or l2:
  16. # 让value先等于carry既有利于下面两个if语句中两个对应节点值相加,
  17. # 也是为了要处理两个链表最后节点相加出现进位的情况
  18. value = carry
  19. # 只要其中一个链表没走完,就需要计算value的值
  20. # 如果其中一个链表走完,那么下面的计算就是加总carry和其中一个节点的值
  21. # 如果两个链表都没走完,那么下面的计算就是carry+对应的两个节点的值
  22. if l1: l1, value = l1.next, l1.val + value
  23. if l2: l2, value = l2.next, l2.val + value
  24. # 为了防止value值大于十,出现进位,需要特殊处理
  25. # 如果value小于十,下面这行的操作对于carry和value的值都没有影响
  26. carry, value = divmod(value, 10)
  27. # 利用value的值创建一个链表节点,并让current.next指向它
  28. current.next = ListNode(value)
  29. # 移动current指针到下一个节点
  30. current = current.next
  31. # 最后只要返回dummy的下一个节点就是我们想要的答案。
  32. return dummy.next
  33. def main():
  34. list1 = ListNode(2)
  35. list1.next = ListNode(4)
  36. list1.next.next = ListNode(3)
  37. list2 = ListNode(5)
  38. list2.next = ListNode(6)
  39. list2.next.next = ListNode(4)
  40. ret = Solution().addTwoNumbers(list1, list2)
  41. print(ret.val)
  42. print(ret.next.val)
  43. print(ret.next.next.val)
  44. if __name__ == '__main__':
  45. main()

 

原文链接:https://blog.csdn.net/allway2/article/details/116105191

0

1

2

3

4



所属网站分类: 技术文章 > 博客

作者:天才也疯狂

链接: https://www.pythonheidong.com/blog/article/953637/76ef4b9f90d167e3adfa/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

20 0
收藏该文
已收藏

评论内容:(最多支持255个字符)