python两数求和_Python两数相加实现
題目要求:
思路:
遍歷第一個與第二個鏈表,把相同位置的相加
設置一個flag,用來標記相加后大于10的部分,下一位再相加時,就要加上flag的值
遍歷至一個鏈表結束
如果此時flag不為0,把未結束的鏈表當前的第一位加上flag
falg記錄相加大于10的部分
直至當前列表也遍歷完
如果遍歷完,flag仍然不為0,再補一位1
核心代碼:
遍歷兩個鏈表:
# 把鏈表1 2 的頭賦給h1,h2
h1 = l1
h2 = l2
# 創建新鏈表,用來保存計算完的數
l3 = ListNode()
h3 = l3
# flag標志兩數加完大于9的部分
flag = 0
# 遍歷兩個鏈表,h3當前的值為h1+h2去掉十位的部分,flag保存進位,運算完h1,h2,h3移向下一位
while h1 and h2 :
h3.next = ListNode((h1.val + h2.val + flag) % 10)
flag = (h1.val + h2.val + flag) // 10
h1 = h1.next
h2 = h2.next
h3 = h3.next
– 如果鏈表1或2未遍歷完:
#原理如上
if h1 :
while h1 :
h3.next = ListNode((h1.val + flag) % 10)
flag = (h1.val + flag) // 10
h1 = h1.next
h3 = h3.next
# 用elif,如果是h1有未遍歷的,遍歷結束后就不遍歷h2了
elif h2 :
while h2 :
h3.next = ListNode((h2.val + flag) % 10)
flag = (h2.val + flag) // 10
h2 = h2.next
h3 = h3.next
- 如果最后一位相加后,仍需進位:
if flag == 1:
h3.next = ListNode(1)
完整代碼:加上判斷l1和l2一開始是否為空,如果l1為空,返回l2,如果l2為空,返回l1
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
if l1 is None:
return l2
if l2 is None:
return l1
h1 = l1
h2 = l2
l3 = ListNode()
h3 = l3
flag = 0
while h1 and h2 :
h3.next = ListNode((h1.val + h2.val + flag) % 10)
flag = (h1.val + h2.val + flag) // 10
h1 = h1.next
h2 = h2.next
h3 = h3.next
if h1 :
while h1 :
h3.next = ListNode((h1.val + flag) % 10)
flag = (h1.val + flag) // 10
h1 = h1.next
h3 = h3.next
elif h2 :
while h2 :
h3.next = ListNode((h2.val + flag) % 10)
flag = (h2.val + flag) // 10
h2 = h2.next
h3 = h3.next
if flag == 1:
h3.next = ListNode(1)
return l3.next
總結
以上是生活随笔為你收集整理的python两数求和_Python两数相加实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python库怎么学啊最好_最常用的几个
- 下一篇: python遍历文件对象_Python文