1

私は迷っており、誰かがここで私を助けてくれることを本当に願っています.重複した番号ノードを見つけて重複を削除する関数を作成することになっています. コード全体を実行するたびに、内部で無限ループに陥りますwhile(current.next != null)

私の主な質問は、私の問題がにあることを知っているということif (tester.data == current.data)です。彼らがテストも比較もしない理由がわかりません(int)。これが漠然とした質問である場合は申し訳ありません。私は何時間も困惑して画面を見つめてきました。

public void removeDuplicate()
{
    // removes all duplicate nodes from the list

    Node tester = head;
    Node previous = head;
    Node current = head.next;

    while (tester.next != null){
        int i = 0;
        while(current.next != null){
            System.out.println("Stuck here3");
            if (tester.data == current.data){
            Node tempNode = current.next;
                previous.next = tempNode;
                current = tempNode;
                size--;
                System.out.println("Stuck here2");
                break;
                }

            else{   
                previous = current;
                current = current.next;
            }

        }
        System.out.println("Stuck here1");
        tester = tester.next;
        current = tester.next;
    }

}
4

1 に答える 1

0

私の主な質問は、私の問題が if (tester.data == current.data) にあることを知っているということです。彼らがテストも比較もしない理由がわかりません(int)。これが漠然とした質問である場合は申し訳ありません。私は何時間も困惑して画面を見つめてきました。

いいえ、それはあなたの問題ではありません。彼らは実際にテストと比較を行い、ノードの削除はそれが発生したときに機能します。

ただし、コードには他の問題があります。

内側のループのためbreak、値ごとに 1 つの重複のみを削除します。

それを取り除くとbreak、より近くなりますが、ループの最後には、

    tester = tester.next;
    current = tester.next;

previous適切な新しい値に設定していません。

そのはず

    tester = tester.next;
    previous = tester;
    current = tester.next;

これらの両方の変更を行うと、リストの最後にある場合を除いて、コードはすべての重複を削除します。

それも修正できると思いますが、ほぼ完全に書き直す傾向があります。もしそうなら、私はそれを投稿するかもしれません。

于 2012-09-21T02:28:07.223 に答える