在LeetCode上刷题时对listnode的使用不是很理解,后来大概读懂了。note一下。
ListNode是一个类:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val # val为变量值,
self.next = next # next为下一节点的指针
定义ListNode为链表的一个节点,该节点存储了两个变量val和next,即该节点值和下一个节点的指针,当next为空时表示该节点是链表的最后一个节点。
下面看代码:
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
head = point = ListNode(0) #
carry = 0 #进位位初始值为0
while l1 or l2:
new_point = ListNode(0) #实例化一个节点
if not l1: #如果l1遍历完,则计算l2
sum_ = l2.val + carry
new_point.val = sum_%10
carry = sum_//10
l2 = l2.next #指针指向下一个节点
elif not l2:
sum_ = l1.val + carry
new_point.val = sum_%10
carry = sum_//10
l1 = l1.next
else:
sum_ = (l1.val+l2.val+carry) #求链表l1和l2的和,再加上进位
new_point.val=sum_%10 #将和的个位数赋值给新节点值
carry = sum_//10 #进位位
l1 = l1.next #指针指向下一位
l2 = l2.next
point.next = new_point # 每计算得到一个和就将它放到指针指向的位置
point = point.next
if carry: #如果加完最后一个数还有进位的话,追加一个节点
new_point = ListNode(1)
point.next = new_point
return head.next #至于这里返回为什么是head.next有点不太理解,题目要求是返回一个表示和的链表,希望会的大神不吝赐教