Python:返回所有链表项

时间:2015-01-27 08:59:07

标签: python

我从节点返回值时遇到了一些问题,我做过:

class Node():
  def __init__(self, item, next = None):
    self.item = item
    self.next = next

class upp2():
  def __init__(self):
    self.top=None
    mening=input('Write a meaning: ')
    for ordet in mening.split():
      self.put(ordet)

  def put(self, newdata):
    node= Node(newdata, self.top)
    self.top=node

  def pop(self):
    while self.top.item != None:
      theitem = self.top.item
      self.top = self.top.next
      return theitem


upp=upp2()
print(upp.pop())

代码的工作原理如下:你写了一个含义,意思被分成单独的单词并存储在节点中。节点部分可以工作,但是我在返回所有单词时遇到了问题。 pop()只返回最后一个单词,其余单词不变。我的意思是:

如果我写了一个意思:"我的名字是Ben"我希望它回归:

'Ben
is
name
My' 

但我只得到本。提前感谢

3 个答案:

答案 0 :(得分:0)

你的逻辑是正确的。但是那里的return会打破for循环,导致只返回1个值。

因此,如果您的目标是打印字词,则可以将其替换为print(theitem),或者如果您想在其他地方使用此字段,请使用yield(theitem)

答案 1 :(得分:0)

您的代码中有2个问题。

首先如hyades所述,返回离开你的循环,你应该用yield构建一个生成器

接下来,结束循环的测试是错误的。它应该是while self.top != None:

upp2.pop应该成为:

def pop(self):
    while self.top != None:
        theitem = self.top.item
        self.top = self.top.next
        yield theitem

你可以这样使用它:

for x in upp.pop():
    print(x)

答案 2 :(得分:0)

这是我的解决方案,尽可能地遵循您的代码:

class Node():
    def __init__(self, item, n = None):
        self.item = item
        self.n = n

class upp2():
    def __init__(self):
        self.top=None
        mening=input('Write a meaning: ')
        for ordet in mening.split():
            self.put(ordet)
    def put(self, newdata):
        node = Node(newdata, self.top)
        self.top=node
    def pop(self):
        while self.top != None:
            theitem = self.top.item
            self.top = self.top.n
            if(theitem):
                print(theitem, end=' ') #for python 3.x
                #print theitem,         #for python 2.x

upp=upp2()
upp.pop()

#input: my name is user2149616
#output:user2149616 is name my

首先,我会避免使用next,因为它是一个python关键字(进入Node类定义)。其次你的主要错误是内部的回归。它会停止功能,因此它只会打印第一个节点的内容。 我希望这可以有所帮助。 此致