这里是完整的解决方案;
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def __init__(self):
self.head = None
def rev(self, ls):
res = []
self.head = ls
while self.head:
res.append(str(self.head.val))
self.head = self.head.next
return list(reversed(res))
def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
res1 = int(''.join(self.rev(l1)))
res2 = int(''.join(self.rev(l2)))
res3 = str(res1 + res2)
resls = list(reversed([i for i in res3]))
self.head = ListNode(resls[0], None)
finalres = self.head
for i in range(1, len(resls)):
lsn = ListNode(resls[i], None)
finalres.next = lsn
finalres = finalres.next
return self.head
**Explanation**:
我假设您了解链表的基础知识,即它们是什么(如果您有任何困惑,请发表评论)。
所以在解决方案类中,我只是在其__init__ 方法中定义了一个self.head 属性,我将使用它来跟踪链表中的元素。它最初设置为无,因为那里没有任何数据。
然后我定义了一个 rev 方法来反转给定的链表。
在 rev 中,我创建了一个空列表 res 来存储提供的链表中的数据。
Rev 也将链表作为参数,因为我将从链表中获取数据并将其附加到 res 列表中
所以我把 self.head 与我们调用方法时提供的链表 ls 相等。
然后我只是运行了一个 while 循环,直到 self.head 被定义(即,直到它不是 None 这意味着仍有数据)。
每次迭代后,我不断将 self.head 更改为 self.head.next 以在链表中向前移动并从该链表的每个节点中获取数据并将其附加到 res 列表。
最后我只是返回了反向的 res。
然后我定义了另一个方法,addTwoNumbers,它接受两个链表并根据要求返回总和。
首先,我需要这两个链表为整数形式并反转(根据条件)。所以我使用 rev 方法来反转它们,join 方法(python 中的内置方法来加入字符串列表)将列表转换为字符串,然后使用 int 方法将字符串转换为 int。
我对两个链表都做了同样的事情,并将它们分别存储在 res1 和 res2 中。
然后我将它们的总和 (res3) 转换为字符串,因为我们无法迭代整数。
然后我将 res3 转换为反向列表。
现在是最后一步,将整个内容作为列表节点返回。
所以我只是创建了一个 ListNode 的实例;
self.head = ListNode(resls[0], None)
这将创建一个 ListNode 实例,其中 data 作为 resls 的第一个元素,next 作为 none。
然后我将它存储在另一个变量中以引用同一个实例并且不要更改它。
然后在剩余元素上运行一个远循环并不断添加数据和下一步。
希望你能理解。谢谢。