【发布时间】:2019-02-14 00:17:29
【问题描述】:
我正在尝试为hackerrank 给出的解决方案提出一个测试用例,用于使用python 检测链表中的循环。 hackerrank给出的解决方案是:
class Node(object):
def __init__(self, data = None, next_node = None):
self.data = data
self.next = next_node
def has_cycle(head):
fast = head;
while(fast != None and fast.next != None):
fast = fast.next.next;
head = head.next;
if(head == fast):
return True;
return False;
所以我创建了我认为的以下 LinkedList
8 -> 7 -> 6 -> 5 -> 4 -> 3
^ |
| V
1 <-----------------2
使用此代码:
Node_1 = Node(1)
Node_2 = Node(2, Node_1)
Node_3 = Node(3, Node_2)
Node_4 = Node(4, Node_3)
Node_5 = Node(5, Node_4)
Node_6 = Node(6, Node_5)
Node_7 = Node(7, Node_6)
Node_8 = Node(8, Node_7)
Node_1 = Node(1, Node_7)
但结果不是我所期望的:
print(has_cycle(Node_8)) # returns False
print(Node_2.next.next) # returns None
print(Node_1.next.data) # returns 7
这将在 C++ 中工作,所以它让我认为问题在于我传递对象的副本而不是它们的指针。如果是这样的话,有人可以指点我一些材料来了解这些概念吗?
另外,我将如何创建上述测试用例?
谢谢!
【问题讨论】:
-
看看你的循环,
Node_1的下一个节点不应该是节点 7 吗? -
您正在创建两个名为
Node_1的节点节点。 -
另外,把所有
;放在那个解决方案中的人打一巴掌
标签: python oop object pointers linked-list