给出一个包含零售商店出售的饼干品牌名称的链接列表,编写一个python函数来查找并返回饼干品牌的总数。
class Node:
def __init__(self,data):
self.__data=data
self.__next=None
def get_data(self):
return self.__data
def set_data(self,data):
self.__data=data
def get_next(self):
return self.__next
def set_next(self,next_node):
self.__next=next_node
class LinkedList:
def __init__(self):
self.__head=None
self.__tail=None
def get_head(self):
return self.__head
def get_tail(self):
return self.__tail
def add(self,data):
new_node=Node(data)
if(self.__head is None):
self.__head=self.__tail=new_node
else:
self.__tail.set_next(new_node)
self.__tail=new_node
def count_nodes(biscuit_list):
count=0
#PLEASE HELP ME IN THIS CODE TO GET SUITABLE OUTPUT....
temp = Node.get_data(biscuit_list.get_head())
while(temp is not None):
count += 1
temp = Node(temp).get_next()
return count
biscuit_list=LinkedList()
biscuit_list.add("Goodday")
biscuit_list.add("Bourbon")
biscuit_list.add("Hide&Seek")
biscuit_list.add("Nutrichoice")
print(count_nodes(biscuit_list))
输出为1,但这是错误的。 正确的输出是4。
答案 0 :(得分:1)
饼干列表中的temp
项目已经是一个Node,因此您可以继续直接使用Node方法。
def count_nodes(biscuit_list):
count=0
temp = biscuit_list.get_head()
while(temp is not None):
count += 1
temp = temp.get_next()
return count
答案 1 :(得分:0)
您的count_nodes
应该开始指向列表的头项,并且只要当前项的__next
是not None
,就进行迭代-检查链接,而不是数据!
def count_nodes(biscuit_list):
count=0
current = biscuit_list.get_head()
while current is not None:
current = current.get_next()
count += 1
return count
更好的是,继续实施__len__
,为方便起见,实现__iter__
和__next__
来实现语法糖。将您的count_nodes
代码放入__len__
中,以便您可以执行以下操作:
print(len(biscuit_list))
和
for node in biscuit_list:
print(node)
有a great source for Python's magic methods,请务必检查一下,值得阅读。