2016-04-13 12 views
-1

私は、リンクされたリストのクラスを扱っています。以下の私のコード:Python Linked Listの問題

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

class Item(object): 
    def __init__(self, data, next_item = None): 
     self.data = data 
     self.next_item = next_item 

    def get_item(self): 
     return self.data 

    def set_next(self, setnext): 
     self.next_item = setnext 

    def get_next(self): 
     return self.next_item 

class LinkedList(object): 
    def __init__(self): 
     self.head = None 

    def add(self,item): 
     temp = Item(item) 
     temp.set_next(self.head) 
     self.head = temp 

    def find(self, item): 
     current = self.head 
     while current != None: 
      if current == item: 
       print "Found It!" 
      else: 
       current = current.get_next() 

    def print_list(self): 
     node = self.head 
     while node: 
      print node.get_item() 
      node = node.get_next() 

    def size(self): 
     counter = 0 
     current = self.head 
     while current != None: 
      counter += 1 
      current = current.get_next() 
     print counter 

    def insert(self,item,lpos): 
     current = self.head 
     while current != lpos: 
      current = current.get_next() 
      if current == None: 
       return None 
      else: 
       item_insert = Item(item, lpos.next_item()) 
       lpos.set_next(item_insert) 

myList = LinkedList() 
myList.add(1) 
myList.add(2) 
myList.add(3) 
myList.insert(8,2) 

私はこのコードを実行すると方法(挿入)は次のエラーで失敗します。insertメソッドは、あなたがAであなたのリンクリストにノードを追加することができます

Traceback (most recent call last): 
    File "main.py", line 72, in <module> 
    myList.insert(8,2) 
    File "main.py", line 56, in insert 
    item_insert = Item(item, lpos.Item.next_item()) 
    AttributeError: 'int' object has no attribute 'Item' 

インサートを考慮して、適切なポインタを並べ替えて実行します。

お知らせください!

+0

エラーメッセージの行を削除したようです。 – user2357112

+0

トレースバックをコピーし、最も重要な情報、つまり例外自体をスキップするのはなぜですか? –

+0

@Rogalski申し訳ありませんが、私はそれを間違って切り捨てました。私は今それを追加しました – Paul

答えて

1

「アイテム」と「インデックス」の違いには注意を払っていません。索引は、リスト内の項目の位置に存在する符号なしの数字ですが、項目はリスト内のノードです。

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

class Item(object): 
    def __init__(self, data, next_item = None): 
     self.data = data 
     self.next_item = next_item 

    def get_item(self): 
     return self.data 

    def set_next(self, setnext): 
     self.next_item = setnext 

    def get_next(self): 
     return self.next_item 

class LinkedList(object): 
    def __init__(self): 
     self.head = None 

    def add(self,item): 
     temp = Item(item) 
     temp.set_next(self.head) 
     self.head = temp 

    def find(self, item): 
     current = self.head 
     while current != None: 
      if current == item: 
       print "Found It!" 
      else: 
       current = current.get_next() 

    def print_list(self): 
     node = self.head 
     while node: 
      print node.get_item() 
      node = node.get_next() 

    def size(self): 
     counter = 0 
     current = self.head 
     while current != None: 
      counter += 1 
      current = current.get_next() 
     print counter 

    def insert(self,item,lpos): 
     if lpos == 0: 
      item_insert = Item(item, self.head) 
      self.head = item_insert 
      return 
     current = self.head.get_next() 
     previous = self.head 
     index = 1 
     while index != lpos: 
      index += 1 
      previous = current 
      current = current.get_next() 
      if current == None: 
       return None 

     item_insert = Item(item, current) 
     previous.set_next(item_insert) 

myList = LinkedList() 
myList.add(1) 
myList.add(2) 
myList.add(3) 
myList.insert(8,0) 
myList.print_list() 
+0

これに助けてくれてありがとう。私はPythonの初心者ですが、私はまだクラス/メソッド/関数の仕組みの基礎を学んでいます。私はあなたの洞察に感謝します。それにかかわらず、あなたのコードは動作します! – Paul

+0

あなたのコードにちょっとした変更を加えるだけです。がんばろう! – Yang

0

lposインデックスであり、タイプはintです。しかし、あなたが設定したいものはItem.next_item()ですが、もちろん動作しません。変更:へ

# lpos is Int 
item_insert = Item(item, lpos.next_item()) 

:とにかく

# use Item instance to do your stuff 
item_insert = Item(item, current.next_item()) 

、インサートの実装は正しいことではないはずです。