复习点
- 题目关键词:链表、逆序、每个节点储存一位数字。
- 在 python 中,可以使用“类+引用”实现链表。
- 使用类几乎可以模拟任何东西。在 python 中,首字母大写的名称指的是类;类中的函数称为方法。
- 链表是用指针连接的用于存储数据的数组,它最大的优点是在于有效利用零碎的内存空间。在很多语言中,数组的大小要提前定义,定义后不能随便更改,而且数组中只能存储同一类型的变量。使用链表,可以改变数组的长度,并且可以在同一数组中存储不同类型的元素,和 python 中的列表很像,事实上列表的工作原理就是链表。其中单链表,一个点储存两个信息,此元素的值和 next 元素指针值;双链表储存三个信息,此元素值和 right 指针值和 left 指针值。
- 在 python 语言中没有指针,所以在本题中要使用模拟指针的方法来实现链表。
代码如下
class Solution(object):
def addTwoNumbers(self, l1, l2): #方法addTwoNumbers定义中包含了三个形参,定义中self必不可少还必须位于其他形参的前面。
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
if self.getLength(l1) < self.getLength(l2): # 保证l1永远比l2更长
l1, l2 = l2, l1 #若l2长,交换
head = l1 #head是指向链表第一个元素的指针,需要自己定义
while (l2): # 执行加法
l1.val = l1.val + l2.val # l2的值加在l1上
l1 = l1.next
l2 = l2.next
p = head # 遍历l1处理进位处理进位
while (p):
if p.val > 9:
p.val -= 10
if p.next:
p.next.val += 1
else:
p.next = ListNode(1)
p = p.next
return head
def getLength(self, l): #计算链表长度
length = 0
while (l):
length = length + 1
l = l.next
return length
参考:https://blog.csdn.net/qq_32424059/article/details/88855423