【发布时间】:2019-01-28 06:36:20
【问题描述】:
我想知道在尝试查找循环中连接的节点数时我可能做错了什么。这是我在 python 中的实现。
# Defined Node class
class Node(object):
data = 0
def __init__(self, data=None, next_node=None):
self.data = self.increment()
self.next = next_node
def increment(self):
Node.data += 1
return Node.data
def setNext(self, next_node = None):
self.next = next_node
我定义了一个函数,通过将任意数量的节点和所需的循环长度作为参数来创建节点链。
def create_chain(num_of_nodes, loop_size):
nodes = [Node() for _ in range(num_of_nodes)]
if loop_size == 0:
return nodes[0]
else:
for node, next_node in zip(nodes, nodes[1:]):
node.next = next_node
# cleaned_nodes.append(node)
nodes[num_of_nodes-1].next = nodes[(num_of_nodes - loop_size)-1]
return nodes[0]
然后我定义了一个函数来确定给定作为参数传递给函数的初始节点的循环的大小。
def loop_size(node):
count = 0
if node == None:
return 1
if node.next == None:
return 1
slow = fast = node
while(slow or fast or node.next):
count += 1
if fast.next == None:
#count += 1
break
if slow == fast.next or slow == fast.next.next:
count += 1
break
slow = slow.next
fast = fast.next.next
return count
我写了一些测试,但这个特定的断言不起作用,我想了解原因。
def test_very_long_chain(self):
self.chain = create_chain(3904, 1087)
self.assertEqual(loop_size(self.chain), 10, 'Loop size of 10 expected')
我收到此断言错误;
AssertionError: 3264 != 10 : Loop size of 10 expected
非常感谢您对此提供一些指导。谢谢
【问题讨论】:
-
您使用 loop_size = 1087 调用了 create_chain,并断言生成的图有一个大小为 10 的循环。这...看起来不对。
-
废话,我不是这个意思,我的意思是针对
1087而不是10断言结果。但是从AssertionError的结果可以看出,它返回3264。感谢您了解@Norrius -
这更有意义,但我认为我无法帮助您。很难在我的脑海中遵循该代码的逻辑,而且您也没有使用该问题的标准解决方案。您是否尝试过调试,使用debugger 或在不同点的内部状态的简单打印/断言?我无法为您调试它,但这是您应该问自己的第一个问题:
create_chain或loop_size中的问题,即生成的图形是您期望的吗? -
是的。我认为问题出在
create_chain。我已经尝试过,只是无法看到导致问题的原因。不过我会继续寻找。
标签: python python-3.x data-structures singly-linked-list