3

最近、私はこれを見ました:

struct node {
    node*  pNext;
    node** pPrevNext;
};

void insert_before(node** pNext, node* toInsert) {
    toInsert->pNext = *pNext;
    toInsert->pPrevNext = pNext;
    if (*pNext) (*pNext)->pPrevNext = &toInsert->pNext;
    *pNext = toInsert;
};

// node *a, *b;
// insert_before(a->pPrevNext, b);

単一リンク リストのように見えますが、前のノードの次のポインターへのポインターが含まれています。私の質問は簡単です:これは何と呼ばれていますか? その「本当の名前」がなければ、このデータ構造に関する情報の検索は、StackOverflow やインターネット全体で空っぽになります。

これは二重にリンクされたリストではないことに注意してください。これは次のようになります。

struct node {
    node* pNext;
    node* pPrev;
};
4

4 に答える 4

1

これは、O(1) 時間でノードを削除したり、その前にノードを挿入したりできる単一リンク リストです。使用する理由がないため、名前はありません...双方向リンクリストの方が優れています。

于 2012-08-04T04:41:06.733 に答える
1

これには標準的な名前ないと思います。完全な二重連結リスト内でポインタをたどって、ここで利用可能なすべての情報を取得できるため、これは双方向連結リストの一種の制限付きバージョンです。

于 2012-08-04T01:47:24.613 に答える