2016-07-08 10 views
2

をリンクされて、私はいくつかの問題を抱えていたコードです:コード自体は正常に動作しますが、私は、挿入機能を理解するトラブルを抱えているPythonはここで一覧照会

class Node(object): 
    def __init__(self, data): 
     self.data = data 
     self.next = None 

class Solution(object): 
    def insert(self, head, data): 
     if head == None: 
      head = Node(data) 
     else: 
      current = head 
      while current.next: 
       current = current.next 
      current.next = Node(data) 
     return head 

    def display(self, head): 
     current = head 
     while current: 
      print(current.data) 
      current = current.next 

が。最初に、

Head == None 

したがって、新しいノードは引数データで作成されます。これは今から新しいヘッドになります。したがって、このリストに新しいノードを追加しようとすると、elseがトリガーされ、新しいノードが起動します。

current.next 

が作成されます。ここまでは順調ですね。今度は別のノードを追加したい場合、else条件は再びトリガーされますが、新しい現在のオブジェクトが作成されています。これは古い現在のcurrent.nextのメモリーを上書きしませんか?どのようにプログラムは以前のノードのメモリを持つことができますか?

あなたより。

+0

名前にオブジェクトをバインドすることは、* references *を値渡しすることに似ていることに注意してください。新しいオブジェクトは作成されず、既存のオブジェクトへの新しい参照だけが作成されます。 'current = current.next'は*' * current.next'をコピーしませんが、 'current.next'で参照されるオブジェクトを単に' current'によって参照されるように割り当てます。 – MisterMiyagi

+0

私は他の答えの中から1つを最良の答えとして選択しなければならなかったが、あなたのコメントは私が最も理解してくれたのを助けた@MisterMiyagi – MathsIsHard

答えて

1

現在、ローカル変数はで、ノードオブジェクトにはとなっています。上書きしてもノードは破壊されません。現在のポイントを別のものにするだけです。あなたが現在のポイントに言及しているものを参照している限り、あなたは大丈夫です。この場合、番のヘッドをのままにしておくので、常にリストを操作できます。

1

いいえ、新しい現在のオブジェクトは作成されていませんが、変数currentはリストの最後の要素にヒットするまで再割り当てされ、次にリストの最後に作成され割り当てられた新しいNodeオブジェクトです。

関連する問題