0

データ メンバーの値に基づいてリストにノードを挿入しようとしています。基本的に、メンバーisVipが true と評価された場合、そのノードが優先され、通常のノードの前に (ただし、既存の VIP ノードの後ろに) 挿入する必要があります。通常のノードは、リストの最後に追加されます。

2 つのポインターを使用してリストをステップ実行し、n > 2 の要素を挿入する方法については、よくわかっていると確信しています。ただし、n は現在のリスト メンバーの数です。ノードは 1 つだけです。

以下のコードの私の作業バージョンは次のとおりです。

void SelfStorageList::rentLocker(Locker e) {

int count = 0;
    LockerNode *p = head;

if (isEmpty()) {
    head = new LockerNode(e);
    tail = head;
}

for(;p!=0;count++, p=p->next) {

    if(count == 1) {

        if (e.isVip) {

                        if(p->objLocker.isVip)  {
                           LockerNode*p = new LockerNode(e, p->next);

            }
                    }

           }


}

ご覧のとおり、渡されたオブジェクトが VIP かどうか、次に現在のオブジェクトが VIP かどうかを確認しています。ここで、トラブルに見舞われました。両方が VIP であると仮定すると、次の行は次のようになります。

LockerNode*p = new LockerNode(e, p->next);

渡されたロッカー オブジェクトを正しい場所 (つまり、現在の VIP オブジェクトの後) に配置します。もしそうなら、

LockerNode*p = new LockerNode(e, p);

同等に前に配置しますか?配置場所を定義するノードの「次の」メンバーの使用または不在ですか、それともまったく異なるものですか?

誰かが私の疑問を解消してくれることを願っています。ばかげた質問に思えたらごめんなさい! ありがとう!

4

1 に答える 1

0

次のノードが設定されている間、リストを単純に反復しますisVip( current->next->isVip)。反復後、最後にアクセスしたノードがisVipset を持つ最後のノードになり、そのノードの後に​​新しいノードを挿入する必要があります。


isEmpty明示的なチェックやカウンターなしで、より少ない行で実装できます。代わりに標準コンテナを使用すると、それよりもさらに少なくなります。

于 2013-06-08T18:41:26.930 に答える