3

演習として、独自のノード/リストクラスを作成したいと思います。とにかく、リストにノードを追加する方法がわかりません...これが私のコードです:

class Node:
    def __init__(self, value):
        self.element = value
        self.nextEl = None

    def getEl(self):
        return self.element

    def getNext():
        return self.nextEl

class List:
    def __init__(self, fnode):
        self.firstNode = fnode

    def add(self, newNode):

    def printList(self):
        temp = self.firstNode
        while (temp != None):
            print temp.element
            temp = temp.nextEl
4

1 に答える 1

7

ポインターのない最後のノードを見つけて、.nextElそこにノードを追加する必要があります。

def add(self, newNode):
    node = self.firstNode
    while node.nextEl is not None:
        node = next.nextEl
    node.nextEl = newNode

これはリスト全体をトラバースする必要があるため、ほとんどの連結リストの実装では、最後の要素への参照も保持します。

class List(object):
    first = last = None

    def __init__(self, fnode):
        self.add(fnode)

    def add(self, newNode):
        if self.first is None:
            self.first = self.last = newNode
        else:
            self.last.nextEl = self.last = newNode

Python は左から右に複数のターゲットに割り当てるため、before にself.last.nextEl設定されます。newNodeself.last

コードに関するいくつかのスタイル ノート:

  • と を使用is Noneして、識別子が(シングルトンである)is not Noneを指しているかどうかをテストします。None
  • Python ではアクセサーは必要ありません。属性を直接参照するだけです。
  • これが Python 3 でない限り、から継承して新しいスタイルのクラスを使用しますobject

    class Node(object):
        # ...
    
于 2013-02-17T12:14:52.917 に答える