试图解决 LeetCode“两个数字相加”。
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
我写了一个处理列表的程序,而 LeetCode 提供了 ListNode。不幸的是,我无法理解 ListNode 机制(如何迭代,如何获得长度等等)。所以我决定把它转换成列表。请帮助我如何做到这一点,如何遍历所有 ListNode 并将其所有值放入常规列表,然后反之亦然:列表 -> ListNode 以便以正确的类型返回我的答案。
这是我的一段代码:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
l3 = [] #resulting list
shift = 0
# HERE goes code for: ListNode -> List
if len(l1) > len(l2):
l_long = l1
l_short = l2
else:
l_long = l2
l_short = l1
谢谢!
最佳答案
该问题不要求您使用常规列表。由于列表以“相反顺序”存储,这实际上有帮助,因为您可以在两个列表之间单独添加数字,然后计算/进位溢出从左到右移动。例如,添加链表 [5, 1] + [5]
会导致您向结果列表 [0,
添加一个节点,然后迭代到下一个位置,将 10 位向前推进,然后从您的输入中执行 1 加上从上一次迭代的进位中获得 1,得到 2
,所以结果是 [0, 2]
。如果将 1 进位到 9,则再次将进位位向前移动
此外,如果你要构建一个正则列表,你还不如转换成一个int,而不是做数学运算,然后把int变成链表...
但是要将 LinkedList 转换为常规列表,而 LinkedList 类本身不是可迭代类型,则看起来像这样
ll = ListNode(...)
l = []
n = ll
while n is not None:
l.append(n.val)
n = n.next
否则,如果它是一个合适的 Python 可迭代类型,[n.val for n in ll]
关于python - 如何将 ListNode 从 LeetCode 转换为常规列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69314767/