Py学习  »  Python

如何在Python脚本的leetcode测试运行程序中表示这些单链表节点?

Aaron • 3 年前 • 1356 次点击  

我正在努力解决leetcode上的这些链表问题(以及树问题,因为它们使用类似的结构)。实例 https://leetcode.com/problems/merge-two-sorted-lists/

如果我试图在leetcode的魔法盒之外运行这段代码,就会遇到问题。

我的MergeTwoList函数在leetcode编辑器中运行良好(运行成功,被接受)

from typing import Optional


# Definition for singly-linked list.
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next


def mergeTwoLists(list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
    prehead = ListNode(-1)

    prev = prehead
    while list1 and list2:
        if list1.val <= list2.val:
            prev.next = list1
            list1 = list1.next
        else:
            prev.next = list2
            list2 = list2.next
        prev = prev.next
        breakpoint()

    prev.next = list1 if list1 is not None else list2

    return prehead.next


if __name__ == '__main__':
    l1 = ListNode(1)
    l1_2 = ListNode(2)
    l1_3 = ListNode(4)
    l1.next = l1_2
    l1_2.next = l1_3

    l2 = ListNode(1)
    l2_2 = ListNode(3)
    l2_3 = ListNode(4)
    l2.next = l1_2
    l2_2.next = l1_3
    print(mergeTwoLists(l1, l2))

问题是,当我试图从终端运行上述独立程序时,它会进入一个无限循环。

原因是由于我传递给函数的内容,如果我在第一个循环的末尾抛出一个断点()并检查list1和list2

(Pdb) list1
<__main__.ListNode object at 0x00000294E1F8FEE0>
(Pdb) list2
<__main__.ListNode object at 0x00000294E1F8FE20>

这是有道理的。它解释了无限循环,当转换为布尔时,类对象eval为True。

基于此,如果我想让代码在leetcode之外运行,我需要做一些不同的事情。我需要更多关于我的类定义的信息,或者我的测试用例设置错误?

有人知道更多关于Leetcode系统中ListNode类的完整定义吗?或者在我应该如何设置考试时,我缺少了什么?

非常感谢。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/133034
 
1356 次点击  
文章 [ 1 ]  |  最新文章 3 年前