python - 如何将 ListNode 从 LeetCode 转换为常规列表?

标签 python

试图解决 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/

相关文章:

python - K-means 仅使用特定数据框列与 scikit-learn

javascript - get() 无法找到 POST 数据

python - 枪兽错误 14 : source: not found NGINX

python - 全面的初学者 virtualenvwrapper 教程?

python - 从 python 的覆盖范围中排除单元测试

python - 在 SOAPpy 中启用详细日志记录

python - 获取 ndarray 中 N 个最高值的索引

Python。使用 random 命令生成随机 + 或 - 符号

Python 和子进程中的别名

python - 导入 scipy.stats 时,获取 'ImportError: DLL load failed: The specified procedure could not be found'