2017-09-21 69 views
1

我想在链接列表中的位置“index”中插入节点“item”,我有以下代码,对我来说听起来不错,但它不是正确的工作。在python链接列表中的第N个位置插入一个节点

我真的很感激,如果有人可以帮助我。

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 

然后我有:

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 

所以我在这里做了一些测试:

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()) 

,输出是:

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

正如你所看到的节点不被添加。 你能告诉我我的代码有什么问题,以及我如何修复它?

回答

2

insert功能,它应该是Prev.setNext(Temp),之前的未来必须要插入的一个,而不是它的未来:

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

我不认为我们不需要最后一行“current.setData = Temp “ – Albert

相关问题