2017-12-17 11 views
0

私はlist.append()操作をPythonで記述しようとしています。私はリンクされたリストを実装し、それは正常に動作します。しかし、私は最後のデータ項目を印刷することはありません。リストのすべての項目を印刷しようとすると、最後の部分を除いて、ノード内のすべてのデータ値が表示されます。値の代わりに「なし」が表示されます。私は、新しく追加されたノードで次のポインタを 'None'に割り当てる際に間違いを犯しています。固定に役立つ必要があります。リンクリストにPythonで追加機能を実装する

ノードクラスとリストクラスの実装。

class Node: 
    def __init__(self,item): 
     self.data = item 
     self.next = None 
    def getData(self): 
     return self.data 
    def getNext(self): 
     return self.next 
    def setData(self,newItem): 
     self.data = newItem 
    def setNext(self, newNext): 
     self.next = newNext 
class UnorderedList: 
    def __init__(self): 
     self.head = None 
    def isEmpty(self): 
     return self.head == None 
    def add(self,item): 
     temp = Node(item) 
     temp.setNext(self.head) 
     self.head = temp 
    def size(self): 
     count = 0 
     current = self.head 
     while current != None: 
      count = count + 1 
      current = current.getNext() 
    def append(self, item): 
     current = self.head 
     isEnd = False 
     newItem = Node(item) 
     while not isEnd: 
      if current.getNext() == None: 
       isEnd = True 
      else: 
       current = current.getNext() 
     current = current.setNext(newItem) 
     newItem = current.getNext() 
    def printList(self): 
     current = self.head 
     isEnd = False 
     while not isEnd: 
      if current.getNext() == None: 
       isEnd = True 
      else: 
       print current.getData() 
       current = current.getNext() 

私はオブジェクトを作成し、値を渡します。

mylist = UnorderedList() 
mylist.add(31) 
mylist.add(77) 
mylist.add(17) 
mylist.add(93) 
mylist.add(26) 
mylist.add(54) 
print(mylist.size()) 
mylist.append(12) 
print(mylist.size()) 
mylist.append(15) 
print(mylist.size()) 
print('\n') 
print mylist.printList() 

出力は次のとおりです。

6 
7 
8 

54 
26 
93 
17 
77 
31 
12 
None 
+0

: 私もあなたの追記機能を変更していました。あなたが投稿したコードでその出力を得ることは可能ではないと思います。 'UnorderedList.append'では、' Node.setNext'が返り値を持たないため、 'current = current.setNext(newItem)'は 'current''を' None'にします。次の行である 'newItem = current.getNext()'は 'None.getNext'(' AttributeError')を試みます。 – Galen

+0

printlist()のifテストを 'if current == None:'に変更すると動作すると思います。 –

答えて

0

問題ががprintlist()はそうではないあなたが

プリント(mylist.printList())

をしているのです実際に何かを返す。それはそこに最後に印刷されたものではない。

・ホープこのことができます:

current = self.head 
while(current!=None): 
     print(current.getData()) 
     current=current.getNext() 

これはがprintlistの内側に配置する必要があります。

そして、このように呼ばれる:

mylist.printlist() 
54 
26 
93 
17 
77 
31 
12 
15 

編集:あなたが使用している正確なコードを投稿してください

def append(self, item): 
    print("append",item) 
    current = self.head 
    isEnd = False 
    newItem = Node(item) 
    while not isEnd: 
     if current.getNext() == None: 
      isEnd = True 
     else: 
      current = current.getNext() 
    print("\Appending to",current.getData()) 
    current.setNext(newItem) 
    current=current.getNext() 
    print("\tAppended",current.getData()) 
+0

@Sruthi、ありがとうございました。しかし、あなたのプリント機能の実装と私の違いは何ですか? if current == None: 'に変更され、そのまま動作しました。 –

+0

ねえ、違いはないと思うよ。しかし、関数を呼び出さなければならない方法が変更されました。おそらくあなたの実装ではうまくいくでしょうが、不要なフラグ変数を削除しました。 –

関連する問題