2017-09-21 2 views
1

J'essaie d'insérer un nœud "item" en position "index" dans une liste chaînée, j'ai le code suivant et pour moi ça sonne bien, mais ce n'est pas fonctionne bien.insérer un nœud à la Nième position dans la liste chaînée en python

J'apprécierais vraiment si quelqu'un peut m'aider.

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

    def getData(self): 
     return self.data 

    def getNext(self): 
     return self.next 

    def setData(self,newdata): 
     self.data = newdata 

    def setNext(self,newnext): 
     self.next = newnext 

Et puis je:

class UnorderedList: 
    def __init__(self): 
     self.head = None 

    def isEmpty(self): 
     return self.head ==None 

    def add(self,newdata): 
     Temp = Node(newdata) 
     #   What happens here: the Temp.Next is going to connect to the place that head is connected to 
     Temp.setNext(self.head) 
     self.head = Temp 


    def printl(self): 
     current = self.head 
     i="" 
     while current.getNext() != None: 
      i =i+ "-"+str(current.getData()) 
      current= current.getNext() 
     i =i+ "-"+str(current.getData()) 
     return i 

    def insert(self,item,index): 
     current = self.head 
     counter = 0 
     Temp = Node(item) 

     Prev = None 

     if index == 0: 
      Temp.setNext(self.head) 
      self.head = Temp 
     else: 
      while counter < index: 
       Prev = current 
       current = current.getNext() 
       counter = counter + 1 

       Temp.setNext(Prev.getNext()) 
       Prev.setNext(Temp.getNext()) 
       current.setData = Temp 

Donc ici, je fais quelques tests:

mylist = UnorderedList() 
mylist.insert(54,0) 
mylist.add(31) 
mylist.add(77) 
mylist.add(17) 
mylist.add(93) 
mylist.add(26) 
print(mylist.printl()) 
mylist.insert(12,2) 
print(mylist.printl()) 

Et la sortie est:

-26-93-17-77-31-54 
-26-93-17-77-31-54 

Comme vous pouvez le voir le noeud n'est pas ajouté. Pouvez-vous s'il vous plaît me dire ce qui ne va pas avec mon code et comment je peux le réparer?

Répondre

2

Sur la fonction insert, il devrait être Prev.setNext(Temp), avant avoir à côté d'être celui à insérer, et non sa prochaine:

def insert(self,item,index): 
     current = self.head 
     counter = 0 
     Temp = Node(item) 

     Prev = None 

     if index == 0: 
      Temp.setNext(self.head) 
      self.head = Temp 
     else: 
      while counter < index: 
       Prev = current 
       current = current.getNext() 
       counter = counter + 1 

      Temp.setNext(Prev.getNext()) 
      Prev.setNext(Temp) 
      current.setData = Temp 
+1

Je ne pense pas que nous ne avez pas besoin de la dernière ligne "current.setData = Temp "plus – Albert