2010-11-29 3 views
0

のJavaプログラミング - 私はいつものノード内部クラスとインスタンス変数含むJavaクラスCircularList記述しようとしています円形のLinkedList

+2

ちょうど誰かがすでに正確に同じ質問をした気づきましたか? –

+0

こんにちはフェロー学生! PLZは何かを試してみて、あなたがつかまれているポイントに達すると、私たちはあなたを少し押し込むことができます。最初の講義スライドとラボの実践からの最初の演習を見てください。 – Muggen

+2

あなたがこれまでに試したことをあなたが示すなら、人々は助けてくれるでしょう。 – Naveen

答えて

0

ヒントを...循環リストは、次のと以前の代わりに、最初と最後を持っている必要があります。論理の問題

+0

ありがとうございます。 – user508833

2

OK、私はあなたにクラスの完全な実装を与えるつもりはありませんが、代わりに私はいくつかのアドバイスを提供します。

  1. 最後の要素への参照を保持する必要はありません。前のノードと次のノードをノードに配置すると、最後のノードが最初に配置されます。プレビュー
  2. 循環リストには終わりがないという事実以外は、通常のリストと全く同じですが、 :

    ノードtmp = first;

    while(tmp.Next!= null) tmp = tmp.Next;円形リストで

アイデアは、このようなものです:リストが空でない限り、あなたは、ヌルを指すノードを見つけることはありませんので

Node tmp = first; 

while (tmp.Next != first) 
    tmp = tmp.Next; 

。最後にひとつアドバイス、あなたが

list[count] = list[0] = list[count * k] 

はので、これらのメソッドのためにあなたの指標を算出する、心の中でそれを保つために、インデクサを実装して循環リストに範囲外のインデックスのようなものが存在しないことを覚えておく必要がある場合することができますかなりトリッキーです。正のインデックスの場合、主なアイデアは次のとおりです。

index = index % count; 

マイナスのものは若干異なります。私は私の言葉でお手伝いできることを願っています。あなたが実装をしたい場合、私は丁寧にGoogleに尋ねる場合はいくつかあるはずだと信じています:)

最高の運!

+0

ありがとう、ありがとうございました – user508833

+0

こんにちは私は思いついたプログラムを追加しました。おかげで – user508833

+0

あなたは私のためにこれを見てくださいありますか? – user508833

2

私はあなたの問題が何であるか分かりません。必要なものはすべて持っているようです。そのリンクされたリストと通常のものとの唯一の違いは、最後に追加することです。

通常のリンクリストでは、新しいノードを作成し、最後の要素がそのノードをポイントするようにします。この場合、•最後のノードのポインタを新しいノードを指すように変更し、新しいノードを•最初にポイントします。

削除は、通常のリンク済みリストと同じ方法で動作します。ノードを削除したいときは、そのノードを指し示している他のノードを見つけます(以前のノードを削除する場合、最後のノードをチェックする場合はLastをチェックしてください)。

これで問題が解決しない場合は、教えてください。手伝ってください。宿題のようなこの縫い目が..私はそれを推測した Can I use java.util.LinkedList to construct a circular/cyclic linked list?

+0

こんにちは、私が思いついたプログラムを追加し、追加の支援が必要です。ありがとう – user508833

+0

まず、removeLast()にエラーがあります: whileループ内でcurrent.setNextNode(..)を実行すると、すべてのノードが最初のものになります。あなたはそれを外に持ちたいので、最後の2番目のノードのポインタだけが変更されます。 質問のために、引数としてpを指定してremoveByPosition()を呼び出すだけです。この関数を変更して、末尾にtail = current.getNextNode()を設定します。それから1ノードだけが残るまで引数としてpを呼び出してください。 – Zepee

+0

あなたは私のためにこれを見ていただけますか? – user508833

0
class Node { 
    int value; 
    Node next; 
    Node prev; 
    Node(int initialValue) { 
     value = initialValue; 
     next = null; 
     prev = null; 
    } 
    public int getValue() { 
     return this.value; 
    } 
} 

class NodeList { 
    Node pointer; 
    NodeList() { 
     pointer = null; 
    } 
    public void insertNode(int nodeValue) { 
     Node newNode = new Node(nodeValue); 
     if(pointer == null) { 
      newNode.next = newNode; 
      newNode.prev = newNode; 
     }else if(pointer.next == null && pointer.prev == null && pointer != null) { 
      newNode.next = pointer; 
      newNode.prev = pointer; 
      pointer.prev = newNode; 
      pointer.next = newNode; 
     } 
     else if(pointer != null) { 
      newNode.next = pointer.next; 
      newNode.prev = pointer; 
      pointer.next.prev = newNode; 
      pointer.next = newNode; 
     } 
     pointer = newNode; 
     System.out.println(“Successfully inserted : ” + pointer.getValue()); 
    } 
    public void printRing(boolean direction) { 
     Node tempNode = pointer; 
     do { 
      System.out.println(“Value = ” + tempNode.getValue()); 
      tempNode = direction ? tempNode.next : tempNode.prev; 
     } while(tempNode.value != pointer.value);  
    }  
} 
関連する問題