2013-02-23 4 views
0

Просто для начала, это домашнее задание, поэтому я просто ищу намек здесь. Я довольно новичок в Python и программировании в целом. Я должен реализовать список, основанный на курсоре, который дважды связан. У меня возникли проблемы с вставкой в ​​список. Мой инструктор предоставил простой класс Node класс Node2Way. Он также представил метод инициализации:Python 3 Вставка в двойной связанный список

from node import Node 

class Node2Way(Node): 
    def __init__(self,initdata): 
     Node.__init__(self,initdata) 
     self.previous = None 

    def getPrevious(self): 
     return self.previous 

    def setPrevious(self,newprevious): 
     self.previous = newprevious 

Вот то, что я до сих пор (только соответствующие методы):

from node2way import Node2Way 

class CursorBasedList(object): 
    """ Linked implementation of a positional list.""" 

    def __init__(self): 
     """ Creates an empty cursor-based list.""" 
     self._header = Node2Way(None) 
     self._trailer = Node2Way(None) 
     self._trailer.setPrevious(self._header) 
     self._header.setNext(self._trailer) 
     self._current = None 
     self._size = 0 

def insertAfter(self, item): 
     """Inserts item after the current item, or 
     as the only item if the list is empty. The new item is the 
     current item.""" 
     temp = Node2Way(item) 
     if self.isEmpty(): 
      self._header.setNext(temp) 
      self._trailer.setPrevious(temp) 
     else: 
      temp.setNext(self._current.getNext()) 
      self._current.setNext(temp) 
      temp.setPrevious(self._current) 
     self._current = temp 
     self._size+=1 

Когда я проверить метод InsertAfter, оно работает для добавления первого элемента , но когда я пытаюсь добавить второй элемент, он говорит, что self._current имеет тип None и не может использовать метод getNext. Я не знаю, есть ли другой способ заставить temp ссылаться на узел после текущего. Я не уверен, что я делаю неправильно, или даже если что-то, что я делаю, прав. Я думаю, как только я получу метод insertAfter, я буду в порядке с методом insertBefore.

Любые советы были бы оценены. Заранее спасибо! :)

+0

Эй вы можете разместить код, в котором вы фактически вставляете два элемента в 'CursorBasedList()', а также сообщение об ошибке? –

ответ

1

В случае

if self.isEmpty(): 
     self._header.setNext(temp) 
     self._trailer.setPrevious(temp) 

Вы никогда не заходило предыдущие и последующие узлы temp.

+0

Спасибо за этот совет. У меня просто возникают проблемы с пониманием связанных списков. : \ – AbigailB

Смежные вопросы