0

リンク リストにノードを追加するメソッドを作成しようとしています。このメソッドは、int (新しいリンクの移動先を指定するため) と String (リンクされたリストが文字列を保持するため) を取ります。リストの特定のポイントにリンクを追加すると思われるコードを書きましたが、新しいノードを追加した後にリストを印刷すると、新しいノードが追加されていないことがわかります。コードを書いているときにコードの動作をテストすることに注意を払っていたので、かなり驚いています.addメソッドは期待どおりに動作しているようですが、新しく印刷されたリストには、新しいリンクを追加した後の変更が反映されていません. . 誰が私が間違っているのか教えてもらえますか:/

ps: クラスとメソッドの名前は議論の余地がありません。私の先生が選んだので、そのままにしておく必要があります。

ありがとう!

リンクされたリストのテスト

class LinkedListTest 
{
    public static void main(String[] args) 
    {
            LinkedList list = new LinkedList();

            list.insertFirst("cat");
            list.insertFirst("dog");
            list.insertFirst("fish");
            list.insertFirst("cow");
            list.insertFirst("horse");
            list.insertFirst("pig");
            list.insertFirst("chicken");

            list.add(3, "mouse");

            list.print();
    }   
}

リンク リスト クラス

public class LinkedList 
{
    private Link first;

    public LinkedList() 
    {
        first = null;
    }

    public void insertFirst(String word)
    {
           Link link = new Link(word);
           link.next = first;
           first = link;

           System.out.print(first.item + " ");
    }

    public String deleteFirst()
    {   
        Link temp = first;
        first = first.next;
        return temp.item;
    }

    public String get(int index)
    {
        Link current = first;
        while (index > 0) 
         {
             index--;
             current = current.next;
         }

         return current.item;           
    }

    public void add(int index , String someString)
    {

        Link current = first;

        while (index>0)
        {
            index--;
            current = current.next;
        }

    Link newLink = new Link(someString);
    newLink.next = current;
    current = newLink;

    }

    public void print()
    {
        System.out.println("-----------PRINTING LIST------------");
        Link current = first;
        while(!(current==null))
        {
            System.out.println(current.item);
            current = current.next;
        }
    }
}

リンククラス

public class Link 
{   
    public String item;
    public Link next;

    public Link(String theItem) 
    {
        item = theItem;
    }
}
4

3 に答える 3

3

このようにリストに挿入すると。2 つの「次の」リンクを設定する必要があります。次は挿入するアイテムを指し、次は挿入するアイテムを指し、すくい上げているアイテムを指します。

お役に立てれば。

于 2012-10-26T19:38:30.263 に答える
2

現在のリストに newLink を追加している場所を見てください。ヒント...あなたはそうではありません。newLink を指すローカル変数である を更新currentしますが、newLink をnext現在のリンク リストに実際にあるものの に設定することはありません。

于 2012-10-26T19:38:58.280 に答える
2
newLink.next = current;
current = newLink;

クラスのaddメソッドの上記のコードは次のようになります。LinkedList

newLink.next = current.next;
current.next = newLink
current = newLink;

これで問題が解決することを願っています。途中にノードを挿入するには、次の 2 つのリンクを設定する必要があります。1 つは現在のノードで次のノードを指し、もう 1 つは前のノードで現在のノードを指します。

于 2012-10-26T19:42:22.560 に答える