python,给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
时间: 2023-08-22 18:14:36 浏览: 101
好的,这是一道经典的链表问题,我来给你讲解一下思路。
首先,我们可以从头到尾遍历两个链表,将对应节点的值相加,如果有进位则将进位加到下一次计算中。具体实现可以使用一个变量carry来记录进位。
其次,我们需要注意一些边界条件,比如两个链表长度不一样的情况,还有最后一位相加后可能会有进位,需要特殊处理。
最后,我们需要创建一个新的链表来存储结果,将每次计算的结果作为新节点插入到链表末尾即可。
下面是使用 Python 实现的代码:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def addTwoNumbers(l1: ListNode, l2: ListNode) -> ListNode:
dummy = ListNode(0)
p = dummy
carry = 0
while l1 or l2 or carry:
if l1:
carry += l1.val
l1 = l1.next
if l2:
carry += l2.val
l2 = l2.next
p.next = ListNode(carry % 10)
carry //= 10
p = p.next
return dummy.next
```
这个函数的输入是两个链表l1和l2,输出是它们的和的链表。
我们首先创建一个虚拟头节点dummy,作为结果链表的头节点,然后定义一个指针p来指向结果链表的末尾。
接下来,我们遍历两个链表,每次将对应节点的值相加,并加上进位carry,然后将结果的个位数加入到结果链表中,并更新进位carry。如果某个链表已经遍历完,则将对应节点的值看作0。
最后,如果最高位有进位,则需要将进位加入到结果链表中。
最后返回虚拟头节点dummy的下一个节点即可。
阅读全文