0

したがって、単一リンクリストの抽象データ型があり、テストコードのこの部分を実行するとコンパイラがスタックします。

    test.removeDuplicates();
    System.out.println("removeDuplicates() has been run, check following output for counts of 3");
    test.print();

与えられたリストから重複を削除する私の方法は次のとおりです

public void removeDuplicates() 
{
    if (head == null) return;

    Node iter = head;

    while (iter != null) 
    {
        Node currNode = iter;
        while(currNode  != null && currNode.next != null)
        {
                if(iter.value == currNode.next.value)
                {
                    currNode.next = currNode.next.next;
                    nItem--;
                }
        currNode = currNode.next;
        }
    }
}

whileループがリスト全体をループし、ポインターに値をスキップさせて重複する値を削除することで、これを考えました。

どうやらwhileループの1つが終了せず、私の最後の値がnullへのポインターを取得していないようですが、その理由はわかりません。

4

1 に答える 1

3

iter外側の while ループを更新していないためnull、外側のループが無限に実行されることはありません。

外側の while ループの終わりの直前にこの行を追加します

iter = iter.next

于 2012-09-28T00:39:48.663 に答える