2014-01-15 7 views
1

Я не понимаю, почему следующий код не будет работать. Когда я добавляю вещи в свой LinkedList, он по-прежнему возвращает true для isEmpty(), а printList() ничего не печатает. Понятно, что я использую ссылки, но не могу понять, в чем я, в свою очередь, заблуждаюсь. Если бы вы могли также указать, есть ли что-то не так с моим дизайном, это было бы здорово.Реализация связанного списка в Python

class Node(object): 

    def __init__(self, data, next=None): 

     self.data = data 
     self.next = next 

    def __str__(self): 
     return str(self.data) 



class LinkedList(object): 



    def __init__(self): 

     self.head = None 
     self.size = 0 


    def append(self, *data): 

      n = self.head 
      #new_node = Node(data) 

      if self.head is None: 

       n = self.head 

       for elem in data: 
        n = Node(elem) 
        n = n.next 
        self.size += 1 

      else: 

       n = self.head 
       while n.next != None: 
        n = n.next 

       for elem in data: 
        n.next = Node(elem) 
        n = n.next 
        self.size += 1 




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

    def printList(self): 

     n = self.head 

     while n is not None: 
      print str(n) 
+3

Этот код никогда не назначает ничего (кроме 'None') для' self.head', что это, вероятно, следует сделать в какой-то момент. –

+0

Но если self.head is None, он назначает Node (elem) на self.head? –

+1

Нет, он присваивает 'n' несколько раз и увеличивает' self.size'. Вы никогда ничего не присваиваете 'self.head' вне' __init__'. – l4mpi

ответ

4

Упрощенный код для добавления только одного элемента за раз.

class Node(object): 

    def __init__(self, data, next=None): 

     self.data = data 
     self.next = next 

    def __str__(self): 
     return str(self.data) 



class LinkedList(object): 



    def __init__(self): 

     self.head = None 
     self.size = 0 


    def append(self, data): 
      if not self.head: 
       n = Node(data) 
       self.head = n 
       return 
      else: 
       n = self.head 

       while n.next != None: 
        n = n.next 

       new_node = Node(data) 
       n.next = new_node; 
       return 


    def isEmpty(self): 
     return not self.head 

    def printList(self): 
     n = self.head 

     while n: 
      print str(n) 
      n = n.next 

ll = LinkedList() 
elems = [1, 2, 3, 54, 6] 
for elem in elems: 
    ll.append(elem) 

ll.printList() 

Выход:

>>> 
1 
2 
3 
54 
6 
-1
class Node: 
    def __init__(self): 
     self.data = None 
     self.nextNode = None 

    def set_and_return_Next(self): 
     self.nextNode = Node() 
     return self.nextNode 

    def getNext(self): 
     return self.nextNode 

    def getData(self): 
     return self.data 

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

class LinkedList: 
    def buildList(self, array): 
     self.head = Node() 
     self.head.setData(array[0]) 
     self.temp = self.head 
     for i in array[1:]: 
      self.temp = self.temp.set_and_return_Next() 
      self.temp.setData(i) 
      self.tail = self.temp 
     return self.head 
    def printList(self): 
     tempNode = self.head 
     while(tempNode!=self.tail): 
      print(tempNode.getData()) 
      tempNode = tempNode.getNext() 
     print(self.tail.getData()) 
myArray = [3, 5, 4, 6, 2, 6, 7, 8, 9, 10, 21] 

myList = LinkedList() 
myList.buildList(myArray) 
myList.printList() 
+0

* «Я не понимаю, почему следующий код не будет работать». * Этот ответ даже не пытается ответить на фактический вопрос OP. Код без контекста не помогает кому-то новому в программировании. – SethMMorton

-1
class LinkedList(object): 
    def __init__(self,data,none): 
     self.data=data 
     self.none=none 

    def insert(self): 
Смежные вопросы