如何为Python链表问题创建自己的输入



我刚刚开始通过LeetCode学习Python。我的问题是876";"链表中间";。解决方案如下:

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution(object):
def middleNode(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
slow = fast = head
while fast and fast.next:
slow = slow.next
fast = fast.next.next
return slow

从LeetCode,当输入为[1,2,3,4,5]时,输出为[3,4,5]。当我在自己的IDE中运行这段代码时,我可以问一下如何创建自己的输入吗?我尝试了以下

head = ListNode([1,2,3,4,5])
print(Solution().middleNode(head))

但它并没有向我显示正确的输出[3,4,5],相反,它显示了";进程结束,退出代码为0";

非常感谢!

您需要两个函数:

  1. 将标准列表转换为链表的一个(用于调用middleNode(
  2. 一个用于将链接列表转换回列表(用于打印结果(

我建议将方法添加到ListNode类中。第二个可能实际上是__iter__,这样链表就可以迭代,然后只需要在打印语句中放入*操作符:

class ListNode(object):
def __init__(self, val=0, next=None):
self.val = val
self.next = next
@classmethod
def of(Cls, lst):
head = None
for val in reversed(lst):
head = Cls(val, head)
return head
def __iter__(self):
head = self
while head:
yield head.val
head = head.next
class Solution(object):
def middleNode(self, head):
slow = fast = head
while fast and fast.next:
slow = slow.next
fast = fast.next.next
return slow

head = ListNode.of([1,2,3,4,5])
print(*Solution().middleNode(head))

LeetCode允许您使用Python列表表示法指定链表,因为您可以在浏览器中执行自定义单元测试。该函数实际上并不接受链接列表;如果你在本地运行东西,你必须从一个普通的Python列表转换为一个链表。

您所做的转换不太正确:您所做是创建一个新的ListNode,它的val字段设置为列表[1, 2, 3, 4, 5]next字段设置为None。

以下是您要查找的内容(迭代输入列表中的每个元素,并将它们插入到链接列表中(:

def convert_to_linked_list(input_list):
head = None
for i in range(len(input_list) - 1, -1, -1):
new_head = ListNode(input_list[i], head)
head = new_head
return head

编辑:打印链接列表中的值(如后续要求(:

ll = convert_to_linked_list([1, 2, 3, 4])
current = ll
while current is not None:
print(current.val)
current = current.next

当我在我的端上运行这段代码时,它看起来像是在产生一个输出:

<__main__.ListNode object at 0x000001DCF7B5EFD0>
Process finished with exit code 0

它似乎并不是你所期望的输出。当我调试代码时,middleNode似乎跳过了while循环,因为默认情况下,ListNode类的下一个是None,在python中它的计算结果为false。所以它只是缓慢地返回,这就是最初的ListNode。

相关内容

  • 没有找到相关文章

最新更新