2016-10-18 4 views
0

二重リンクリストには2つのダミーノードがあるため、1つは先頭で、もう1つは末尾です。私はself.__current == None: raise StopIterationでダミーテールノードをスキップすることができますが、ダミーヘッドノードを渡して次のノードをどのようにトラバースするかわかりません。二重リンクリストを横断してヌルノードをスキップするIteratorの使用方法

class LinkedListDLL: 

    def __init__(self): 
     self.__head = NodeDLL(None) 
     self.__head.set_next(self.__head) 
     self.__head.set_prev(self.__head) 
     self.__count = 0 

    def size(self): 
     return self.__count; 

    def is_empty(self): 
     return self.__count == 0 

    def add_before(self, item, curr): 
     new_node = NodeDLL(item) 
     new_node.set_next(curr) 
     new_node.set_prev(curr.get_prev()) 
     curr.set_prev(new_node) 
     new_node.get_prev().set_next(new_node) 
     self.__count += 1 

    def add_to_head(self, item): 
     self.add_before(item, self.__head.get_next()) 

    def add_to_tail(self, item): 
     self.add_before(item, self.__head) 

    def remove_from_head(self): 
     self.remove(self.__head.get_next()) 

    def remove_from_tail(self): 
     self.remove(self.__head.get_prev()) 

    def remove(self, curr): 
     curr.get_prev().set_next(curr.get_next()) 
     curr.get_next().set_prev(curr.get_prev()) 
     self.__count -= 1 

    def __iter__(self): 
     return LinkedListIterator(self.__head) 

class LinkedListIterator: 
    def __init__(self, head): 
     self.__current = head 

    def __next__(self): 
     if self.__current == None : 
      raise StopIteration 
     else: 
      item = self.__current.set_data.get_next() 
      self.__current = self.__current.get_next() 
      return item 
+0

ヘッドおよびテールノードは「なし」ではなく、「なし」の値を持つNodeDLLオブジェクトです。 –

答えて

0

あなたはNodeDLL(None)Noneと同じではないかもしれないということを念頭に置いて、あなたのコードをリファクタリングする必要があります。これにより、

関連する問題