我只是想确保我的getCount函数能够正常工作,因为我不知道如何测试它以确保它有效可以有人告诉我如何测试这个函数或我做错了什么?它应该计算我的链表中某个对象发生的次数。
这是ListNode导入
class ListNode(object):
def __init__(self, item = None, link = None):
'''creates a ListNode with the specified data value and link
post: creates a ListNode with the specified data value and link'''
self.item = item
self.link = link
from ListNode import ListNode
class LinkedList(object):
#--------------------------------------------------------------
def __init__(self, seq=()):
""" Pre: Creates a Linked List
Post: Creates a list containing the items in the seq=()"""
if seq == ():
# If there is no items to be put into the list, then it creates an empty one.
self.head = None
else:
# Creates a node for the first item.
self.head = ListNode(seq[0], None)
# If there are remaining items, then they're added while keeping track of the last node.
last = self.head
for item in seq[1:]:
last.link = ListNode(item, None)
last = last.link
self.size = len(seq)
def getCount(self, position):
''' This function counts the amount of times a certain item is in the Linked List.'''
count = 0
if self.head == position:
count = 1
if self.head.link is None:
return count
return count + getCount(self.head.link, position)
def __copy__(self):
''' Post: Returns a new Linked List object that is a shallow copy of self.'''
a = LinkedList()
node = self.head
while node is not None:
a.append(node.item)
node = node.link
return a
#-----------------------------------------------------------------
def __iter__(self):
return LinkedListIterator(self.head)
#---------------------------------------------------------------------
class LinkedListIterator(object):
#-----------------------------------------------------------------
def __init__(self, head):
self.currnode = head
#-----------------------------------------------------------------
def next(self):
if self.currnode is None:
raise StopIteration
else:
item = self.currnode.item
self.currnode = self.currnode.link
return item
#-----------------------------------------------------------------
希望我发布了足够的代码供你们查看问题。我只想找到一种方法来测试我的计数是否有效,以及我是否需要知道如何使其工作。
答案 0 :(得分:0)
您的LinkedList.getCount()
方法有几个问题:
如果它等于self.head
,它会尝试计算position
,但self.head
是节点,{{1}的实例}。它永远不会等于你想要计算的值。
它尝试递归使用该方法,但没有全局ListNode
函数。
这里不需要使用递归;只需继续抓住“当前”中的下一个节点,直到用完为止,并每次与getCount()
进行比较:
node.item