2016-11-09 9 views
0

私は最初のデータを取得する方法を見つけようとしています。リンクリストのpythonでヘッドノードを取得する方法

これは、たとえばデータベースのデータです。私が何をしたいか

id name  next 
001 task1 002 
002 task2 003 
003 task3 000 

は、データベースのように001あるべきヘッドノードの最初の値を取得することです。

これは私がここに何を期待私のコード

while True: 
    self.headNode = 000 
    try: 
     lastNode = Task.objects.get(next=self.headNode) 
     self.headNode = lastNode.id 
     break 
    except Task.DoesNotExist: 
     break 

で、self.headNodeの値は001する必要がありますが、それは私に003を与えました。どうすればそれを手に入れるのを助けてください001。私はこれを一ヶ月ほど手伝ってきました。

これは他のデータ例です。

id name  next 
222 task1 444 
333 task2 222 
444 task3 000 

ここでは...ヘッドノードは333である必要があります。私はちょうどnext000であるデータを得るでしょう。その後、それを取得する444です。次のデータが444id222のデータを取得します。最後にデータを取得するnext222です、あなたはID 333を取得します。ヘッドノードが333であることを示します。私はそれをはっきりと説明してくれることを望みます

+1

あなたは 'break'と' continue'を混乱させると思います。 'break'は現在のループを終了します。この場合は' while True'です。ループに1回だけ入力します。 'continue'は現在の反復を止め、次の反復を開始します。 –

+0

@Rightlegああ、私は参照してください。私も 'continue'を試みましたが、無限ループを与えてくれます。 –

+1

break文を追加したので、ループは1回だけ実行されます。また、headNodeの初期値が000であるため、lastNodeにはあなたが作成したクエリが003が含まれているので、next = 000としてフィルタリングします。これはid 003です。それで、003 – aliasav

答えて

1

breakステートメントを追加したため、ループは1回だけ実行されます。

また、000でのヘッドノードの初期値から、lastNodeは、あなたが書いたクエリ以来、003が含まれています次= 000などのフィルタ、なぜあなたは003

オーケーを取得しているだた、私たちのid 003 headNodeが他のノードの次のノードでないノードであれば、次のように取得することができます:

self.headNode = 000 
while True:  
    try: 
     lastNode = Task.objects.get(next=self.headNode) 
     self.headNode = lastNode.id   
    except Task.DoesNotExist: 
     print("Head Node ->", self.headNode) 
     break 
+0

ですが、ヘッドノードは不明です。 –

+0

私は、それが 'Next'の値と同じデータを持たないため、ヘッドノードであることを知ることができます –

+1

コンテキスト内のヘッドノードを特定する方法を正しく指定してください – aliasav

関連する問題