2 题解
模拟加法的过程,这题本身将数字逆序存储了,如果不逆序存储,咱们自己做的时候要进行逆序存储,因为这样方便处理。
按位相加,保存进位,循环这个过程直到两个数最短的加完,然后将进位和较长数字剩余的数字位相加,最后要注意的边界条件是所有数位都处理完,但是进位不为0
3 Python# 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: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
#头结点
head=ListNode()
#结果链表当前指针
current_p=head
#每位数字相加产生的进位
carry=0
#遍历两个链表进行按位相加
while l1 is not None and l2 is not None:
#当前位相加的结果
temp_result=l1.val+l2.val+carry
#生成一个新的结果链表节点
result=ListNode()
#相加结果的个位作为当前位的相加结果
result.val=temp_result%10
#相加产生的进位
carry=temp_result//10
#添加节点到结果链表中
current_p.next=result
#当前指针后移一位
current_p=current_p.next
#处理下一位
l1=l1.next
l2=l2.next
#处理剩余的位
while l1 is not None:
#当前位相加的结果
temp_result=l1.val+carry
result=ListNode()
#个位作为当前位相加结果
result.val=temp_result%10
#当前进位
carry=temp_result//10
#添加到结果链表中
current_p.next=result
#当前指针后移一位
current_p=current_p.next
#处理下一位
l1=l1.next
while l2 is not None:
#当前位相加的结果
temp_result=l2.val+carry
result=ListNode()
#个位作为当前位相加结果
result.val=temp_result%10
#当前进位
carry=temp_result//10
#添加到结果链表中
current_p.next=result
#当前指针后移一位
current_p=current_p.next
#处理下一位
l2=l2.next
#如果最后进位不为0
#添加进位到结果链表中
if carry!=0:
result=ListNode()
result.val=carry
current_p.next=result
current_p=current_p.next
return head.next
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)