1

オブジェクトの LinkedList があり、リストのソート順を維持しながら新しいノードを追加 する再帰ListElementメソッドを作成したいと考えています。

今私は持っています:

public static ListElement InsertList(ListElement head, ListElement newelem) {

    if (head == null) {
        head = newelem;
        head.next = null;
    } 
    else if (head.next == null) {
        newelem.next = null;
        head.next = newelem;
    }
    else if (head.value < newelem.value) {
        newelem.next = head;
        head = newelem;
    }
    else if (head.value >= newelem.value) {
        head = head.next;
        return InsertList(head, newelem);
    }
    return head;
}

そして、私はコードでそれを複数回呼び出しています:

ListElement head = null;
ListElement elem;

// this block of code is repeated multiple times with values of 3, 8, 20, and 15
elem - new ListElement();
elem.value = 6;
head = InsertList( head, elem );

出力は次のとおりです。

6
6 3
8 6 3
20 8 6 3
15 8 6 3

この出力は最初の 3 行については正しいのですが、その後はすべておかしくなります。誰か私のアルゴリズムを改善してくれませんか? InsertListメソッドをもっと短縮できる気がします。ありがとう!

4

3 に答える 3

1

15 を挿入しようとすると、4 番目の条件に入ります。

// 20 > 15
else if (head.value >= newelem.value)

次に InsertList を呼び出しますが、ヘッド ノードとして 8 を渡し、3 番目の条件に入ります。

// 8 < 15
else if (head.value < newelem.value) 

ここで、あなたは言う

newelem.next = head;

これは 15 を設定します -> 次 = 8

そして、あなたは言います、

head = newelem;

head = 15 を設定します。

問題が見えますか?@Zim-Zam O'Pootertoot の回答を使用して、バグを修正してください。

于 2013-04-11T03:15:35.323 に答える
0

すべての助けと答えをありがとう!
私に似た別の投稿を見つけましたが、そこにある回答の1つがうまくいったようです。
見たい人のためのリンクは次のとおりです。https://stackoverflow.com/a/15936744/1470257

于 2013-04-11T03:15:37.893 に答える