2017-11-03 11 views
-2

私はクラスコンストラクタのハングを取得していますが、私は学校向けのリンクリストの割り当てを持っています。リンクされたリストのデータ構造の基礎を簡単に理解しようとしています。基本的な考え方を理解しています。私はYoutubeのチュートリアルなどをたくさん見てきましたが、私が理解していないところは、ループを使って自分のノードにある貨物やデータをプリントアウトする方法です。私はこれらの線に沿って何かを書かれているPythonでリンクされたリスト

:今

class Node: 

    def __init__(self, value, pointer): 
     self.value = value 
     self.pointer = pointer 

node4 = Node(31, None) 

node3 = Node(37, None) 

node2 = Node(62, None) 

node1 = Node(23, None) 

...私は、各ノードがポインタが含まれているため、各ノードの宣言は、ノードのクラスのコンストラクタに、リストがリンクされたコールであることを理解します次のノードに移動しますが、ループを使用してそれらを印刷する方法はわかりません。私は "頭"のためのグローバル変数を使用している例を見てきましたし、タスクを達成するために作成されたサブクラスを見てきました。私は老いてばかだ。誰かがそれを遅くして、私が5歳のように私に説明することができるかどうか疑問に思っていました。そこにいる誰かが説明を通して私の手を保持する思いやりを持っていれば、私は非常に義務づけられます。事前に、親切に感謝します。

+0

上記のスニペットにはノードのみのリンクリストはありません。これで、値を追加したり削除したり、指定された位置で値を取得したりするなどの、ノードとメソッドの最初の( "head"または名前を付けたい)参照を持つ適切な 'LinkedList'クラスが必要です。 –

答えて

0

まず第一に、あなたのノードは、このようなものを作成する必要があります。今

node4 = Node(31, node3) 
node3 = Node(37, node2) 
node2 = Node(62, node1) 
node1 = Node(23, None) 

を、私はあなたがリスト内の最後のノードをNoneにポイントだろうと見ることができると確信しています。したがって、Noneに遭遇するまでリストをループすることができます。このようなものはうまくいくはずです:

printhead = node4 
while True: 
    print(printhead.value) 
    if printhead.pointer is None: 
     break; 
    else : 
     printhead = printhead.pointer 
+0

' 1行目、2行目、3行目の「NameError」 – ElmoVanKielmo

+0

Mac ...ありがとうございました。私は把握がそれほど困難ではないことを知っていた。私はオリジナルの投稿を書きましたが間違いを犯しました。 node4 = node(31、None)node3 =ノード(37、node4)node2 =ノード(62、node3)node1 =ノード(23、node2)............. ........それについて申し訳ありません....私は非常に疲れていたときに私はポストを作った...(それは、とにかく私の言い訳です)...あまりにもありがとう...それは非常にシンプルだった例...まさに私が必要としていたもの...あまりにもしばしば、人々は実際に私たちを助けてくれるのではなく、彼らが私たちをどんなにひどく混乱させるかを誇示する機会として、助けを求める泣き叫びをすると思います。 – OldNewb

+0

喜んで助けてください。すべての良い、その簡単な間違いをする。しかし、私は@ElmoVanKielmoの答えは技術的に正しいと言います。しかし、自分の答えに問題があるにもかかわらず、その点を理解しようとしていました。 –

0

これは教育目的のための非常に基本的なリンクリストの実装です。

from __future__ import print_function 
"""The above is needed for Python 2.x unless you change 
`print(node.value)` into `print node.value`""" 

class Node(object): 
    """This class represents list item (node)""" 

    def __init__(self, value, next_node): 
     """Store item value and pointer to the next node""" 
     self.value = value 
     self.next_node = next_node 


class LinkedList(object): 
    """This class represents linked list""" 

    def __init__(self, *values): 
     """Create nodes and store reference to the first node""" 
     node = None 
     # Create nodes in reversed order as each node needs to store reference to next node 
     for value in reversed(values): 
      node = Node(value, node) 
     self.first_node = node 
     # Initialize current_node for iterator 
     self.current_node = self.first_node 

    def __iter__(self): 
     """Tell Python that this class is iterable""" 
     return self 

    def __next__(self): 
     """Return next node from the linked list""" 
     # If previous call marked iteration as done, let's really finish it 
     if isinstance(self.current_node, StopIteration): 
      stop_iteration = self.current_node 
      # Reset current_node back to reference first_node 
      self.current_node = self.first_node 
      # Raise StopIteration to exit for loop 
      raise stop_iteration 
     # Take the current_node into local variable 
     node = self.current_node 
     # If next_node is None, then the current_node is the last one, let's mark this with StopIteration instance 
     if node.next_node is None: 
      self.current_node = StopIteration() 
     else: 
      # Put next_node reference into current_node 
      self.current_node = self.current_node.next_node 
     return node 

linked_list = LinkedList(31, 37, 62, 23) 

for node in linked_list: 
    print(node.value) 

これは、(ループ本体内ブレークの文を含む)が適切に多くのケースを処理しませんが、目標はPythonでリンクリストの実装のための最低限の要件を示すことです。

関連する問題