2016-06-12 8 views
-1

現在、私はDoublyLinkedList(DLL)データ構造を使用してカードゲームに関する私の課題に取り組んでいます。私は、カードのデッキから無作為に4ペアのカードを選び、ノードを切り替えることなくカードの内容を交換したいと考えています。だから、基本的に、私たちはランダムジェネレータを使い、残っているカードの量に基づいてカードのインデックスをランダムに割り当てます。問題は、カードにインデックスを割り当ててスワップする方法です。 arraylistでは、単にgetメソッドとsetメソッドを使用します。しかし、二重リンクリスト(DLL)の場合、私はDLLクラスにアクセスする必要がありますか?誰も助けることができますか?二重リンクリスト

public void swap() { 
    int index1, index2; 
    Card temp; 
    Random generator = new Random(); 
    for(int i=0;i<4;i++){ 
    index1 = generator.nextInt(cards.getSize() - 1); 
    index2 = generator.nextInt(cards.getSize()- 1); 
    //swapping codes here which im stuck here 
    } 
} 
+0

なぜ 'java.util.LinkedList'を使用しないのですか? – Everv0id

+0

ナー、私の任務。 DLLの独自の実装のみを使用できます。 @ Everv0id –

+0

DoublyLinkedListはRandomAccessデータ型であってはなりません。インデックスでNodeにアクセスすることはできません。 2つのノードを交換する必要がある場合は、前と次のノードポインタを入れ替える必要があります。 –

答えて

0

したがって、デッキの構造は次のとおりです。デッキには、カードを持つノードを持つDLLがあります。 DLL内のノードを変更せずにカードを交換する場合は、ノードdataフィールドを変更することができます。

あなたはすでに必要なカードのインデックスを持っているので、ノードへの参照を取得します。リストを使用しているため、線形検索を実装するよりも良い方法はありません。あなたのDLLクラスでは、public Node getNode(Int n)のようなメソッドを作ることができます。このメソッドでは、n回目から次のノードにループし、そのノードを返します。

node1node2は、以前の方法を使用して見つけたノード型のパラメータなどです。タイプnodeのT dataフィールドを入れ替えることができます。デッキクラスでは、今あなたのDLLのタイプはcardです。したがって、getData()setData()のメソッドを使用して値を入れ替えます(1つのノードのデータをスワップしている間、一時変数を保持する必要があります)。

関連する問題