2016-04-13 19 views
-1

Ich habe einen Haken bei der Arbeit mit Klassen in einer verknüpften Liste. Mein Code unten:Python Linked List Problem

#!/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) 

Wenn ich diesen Code ausführen das Verfahren (Einsatz) schlägt mit dem folgenden Fehler:

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' 

Die Insert-Methode ermöglicht es Ihnen, einen Knoten zu verknüpften Liste auf einem hinzufügen spezifizierten Punkt, und führen Sie mit der Neuanordnung der richtigen Zeiger, unter Berücksichtigung der Einfügung.

bitte beraten!

+0

Sie scheinen eine Zeile der Fehlermeldung gelöscht zu haben. – user2357112

+0

Warum sollten Sie eine Traceback kopieren und die wichtigsten Informationen überspringen - Ausnahme selbst? –

+0

@Rogalski Sorry, ich schneide das aus Versehen ab. Ich habe es jetzt hinzugefügt – Paul

Antwort

1

Sie haben nicht auf den Unterschied zwischen "Artikel" und "Index" geachtet. Der Index ist eine vorzeichenlose Ziffer für die Position des Elements in der Liste, das Element ist jedoch ein Knoten in der Liste.

#!/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

danke für Ihre Hilfe zu diesem Thema. Ich bin ein Anfänger bei Python und ich lerne immer noch die Grundlagen, wie Klassen/Methoden/Funktionen funktionieren. Ich schätze deine Einsicht. Egal, dein Code funktioniert! – Paul

+0

Nun, ich mache nur eine kleine Änderung an Ihrem Code. Viel Glück! – Yang

0

Lpos ist ein Index, welcher Typ ist int. Aber was Sie einstellen wollen, ist Item.next_item(), natürlich funktioniert es nicht. Wechsel:

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

zu:

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

Wie dem auch sei, die Implementierung des Einsatzes sollte nicht richtig sein.

Verwandte Themen