返回
刷题日记(六):两数相加,强强联手赢未来!
后端
2023-10-07 06:40:40
【刷题日记】2. 两数相加,强强联手赢未来!
大家好,欢迎来到我的刷题日记,我是你们的老朋友——刷题小达人。 今天,我们要一起挑战力扣网站上的一个中等难度题目:两数相加。
一、题目
看到题目,给人的第一印象就是简单。没错,这道题目的确不难,但它却蕴含着深刻的算法思想和数据结构知识。题目要求我们编写一个函数,将两个非负整数表示的链表相加,并返回和的链表。
二、解题思路
解决这道题目的关键在于理解链表的结构和操作。链表是一种线性数据结构,由一系列节点组成,每个节点包含一个数据值和指向下一个节点的指针。链表的优点在于它可以动态地调整大小,非常适合存储大量数据。
三、算法实现
有了链表的基本概念,我们就可以开始实现算法了。我们首先将两个链表的头部节点分别记为head1
和head2
。然后,我们创建一个新的链表head
来存储和的链表。接着,我们遍历head1
和head2
这两个链表,将它们的节点值相加,并将结果存储在head
链表中。如果相加的结果大于或等于10,我们就将进位值1记下,并在下一个节点的相加结果中加上1。最后,我们返回head
链表作为结果。
四、代码示例
def addTwoNumbers(head1, head2):
"""
:type head1: ListNode
:type head2: ListNode
:rtype: ListNode
"""
dummy = ListNode(0)
current = dummy
carry = 0
while head1 or head2 or carry:
val1 = head1.val if head1 else 0
val2 = head2.val if head2 else 0
total = val1 + val2 + carry
carry = total // 10
current.next = ListNode(total % 10)
current = current.next
head1 = head1.next if head1 else None
head2 = head2.next if head2 else None
return dummy.next
五、复杂度分析
该算法的时间复杂度为O(max(m, n))
,其中m
和n
分别是两个链表的长度。空间复杂度为O(max(m, n))
,因为我们需要创建一个新的链表来存储和的链表。
六、结语
两数相加是力扣网站上的一道经典题目,也是面试中经常被问到的题目。通过这道题目的讲解,希望大家能够对链表有更深入的理解,并掌握链表的常见操作。希望大家继续关注我的刷题日记,我们一起在刷题的海洋中乘风破浪,勇往直前!