2

文字列を二重連結リストに逆の順序で挿入しようとしています。しかし、挿入順序を逆順に維持する方法がわかりません。

これは私の以下のコードです。

theList.insertReverseLexicographicalOrder("B");
theList.insertReverseLexicographicalOrder("A");
theList.insertReverseLexicographicalOrder("H");
theList.insertReverseLexicographicalOrder("D");
theList.insertReverseLexicographicalOrder("E");

public void insertReverseLexicographicalOrder(String dd) {
    Link newLink = new Link(dd);
    if (isEmpty()){
        last = newLink;
    }           
        first.previous = newLink;
    }
    newLink.next = first;
    first = newLink;
}

私のソリューションに基づいたいくつかのコードを使用して、任意の提案をいただければ幸いです..

4

3 に答える 3

1

さて、あなたはそれがすでに逆の順序であると仮定します、それであなたはそれがどこに行くべきかを見つけるまであなたはある種のループスルーを必要とするでしょう..すなわち

Z、Y、X、W、L、K、A

Mを挿入する場合は、辞書式順序でMよりも大きいLが見つかるまでループする必要があるため、そこに挿入します。ノードには以前のポインタがあるため、挿入を自分で理解するのはそれほど難しくありません。

于 2012-01-24T20:20:17.900 に答える
0

リンクリストにノードを挿入する方法:

  1. リストが空の場合、新しいノードが最初になり、それを追跡すると、最後のノードにもなります
  2. それ以外の場合、挿入する位置を見つけます。3つの可能性があります。a)
    最初のノードの前に新しいノードを挿入する必要があり
    ますb)最後のノードの後に
    ​​新しいノードを挿入する必要がありますc)2つの既存のノードの間に新しいノードを挿入する必要があります
  3. 挿入する必要のある場所に応じて、適切な参照、firstおよびlast一部のフィールドnextとフィールドを更新しますprevious
if (first == null) {
    // the list is empty so far
} else

位置を見つけるには、最初にデータを最初のノードのデータと比較して、最初のノードの前に挿入する必要があるかどうかを確認します。

if (newLink.iData.compareTo(first.iData) > 0) {
    // put newLink before first
} else {

あなたはいくつかのリストノードに焦点を合わせ続ける必要があります。最初から挿入ポイントに到達するまで、リストに従ってください。

    Link focus = first; // focus first node
    while(focus.next != null && newLink.iData.compareTo(focus.next.iData) < 0) {
        focus = focus.next;
    }
    // now you have to insert the new value behind focus, left as exercise
    if (focus.next == null) {
        // newLink becomes the last node in the list
    } else {
       // newLink has to be inserted between focus and focus.next
    }
}

次に挿入します。エッジケースに注意してください。前と端の挿入は少し異なります。

于 2012-01-24T20:19:02.847 に答える
0

各要素を比較するリストに目を通す必要があります。挿入しようとしている要素の後に続く要素が見つかったら停止します。ノード クラスに compareTo メソッドを実装することをお勧めします: http://www.javapractices.com/topic/TopicAction.do?Id=10 を使用して比較を行います。

幸運を。

于 2012-01-24T20:22:52.073 に答える