0

はじめに、これは宿題なので、ここでヒントを探しています。私はPythonとプログラミング全般にかなり慣れていません。二重にリンクされたカーソルベースのリストを実装することになっています。リストへの挿入に問題があります。私のインストラクターは、Node2Wayクラスという単純なNodeクラスを提供しました。彼はまた、initメソッドを提供しました。

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メソッドをテストすると、最初のアイテムを追加するために機能しますが、2番目のアイテムを追加しようとすると、self._currentはNoneタイプであり、getNextメソッドを使用できません。現在のノードの後に​​ノードを参照するように一時的に取得する別の方法があるかどうかはわかりません。何が間違っているのか、あるいは何かが正しいのかどうかはわかりません。insertAfterメソッドを正しく取得したら、insertBeforeメソッドで問題ないと思います。

ヒントをいただければ幸いです。前もって感謝します!:)

4

1 に答える 1

1

の場合

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

の前のノードと次のノードを設定することはありませんtemp

于 2013-02-23T20:47:15.517 に答える