如何使用python

时间:2019-05-31 21:14:53

标签: python data-structures

给出一个包含零售商店出售的饼干品牌名称的链接列表,编写一个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。

2 个答案:

答案 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应该开始指向列表的头项,并且只要当前项的__nextnot 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,请务必检查一下,值得阅读。