1 题目描述
2 解题思路
进位符+哨兵节点
繁琐版本的代码
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
ret=ListNode()
tmp=ret
#哨兵节点
count=0
#进位符
while(l1!=None and l2!=None):
print(ret)
v=l1.val+l2.val+count
if(v>=10):
v=v-10
count=1
else:
count=0
tmp.next=ListNode(v)
tmp=tmp.next
l1=l1.next
l2=l2.next
#如果l1和l2都有值的话,对应的值相加,同时看是否超过10了,超过10的话,减10进位
while(l1!=None):
v=l1.val+count
if(v>=10):
v=v-10
count=1
else:
count=0
tmp.next=ListNode(v)
tmp=tmp.next
l1=l1.next
while(l2!=None):
v=l2.val+count
if(v>=10):
v=v-10
count=1
else:
count=0
tmp.next=ListNode(v)
tmp=tmp.next
l2=l2.next
#只有x或者只有y有值的时候
if(count==1):
tmp.next=ListNode(1)
#如果最后还有一位进位的话
return(ret.next)
精简版本的代码
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
ret=ListNode()
#哨兵节点
add=0
#进位值
tmp=ret
while(l1!=None or l2!=None or add==1):
num=0
#当前该位相加的结果
if(l1!=None):
#如果l1有值的话,就把l1的值加进去
num+=l1.val
l1=l1.next
if(l2!=None):
#如果l2有值的话,就把l2的值加进去
num+=l2.val
l2=l2.next
if(add==1):
#如果有进位的话,就进位
num+=add
add,num=divmod(num,10)
#计算当前位和进位值
tmp.next=ListNode(num)
tmp=tmp.next
return ret.next