-1

タイトルが示すように、二重にリンクされたリストを反復処理する必要があります。唯一の問題は、「n」個の要素を反復処理する必要があることです。

たとえば、1 3 2 2 1 1 のリストが与えられた場合、現在の値に応じて左または右に反復する必要があります。

1 -> 3 -> 1 -> 1. リスト内の値と同じ値に移動できます。1 から開始するので、左または右に 1 要素移動できます (右にしか移動できません)。3に着地すると、左右の3要素などに移動できます。

while (temp->next != NULL) {
   //traverse n elements left or right
}

一度に 1 つの要素をトラバースする必要がある場合は、次のように簡単です。

temp = temp->next;

ノードの値に応じて「n」個の要素をトラバースする戦略を誰かが説明できれば、それは大歓迎です。

編集: その方向に十分な要素がある場合にのみ、その方向に進むことができます。1 -> 3 の場合、右に 3 しか移動できません。

4

1 に答える 1

0

あなたの質問は、n要素をトラバースすることだと思います。ここで、nは現在のノードの値です。コードは〜のようになります

int tr;
while (temp->next != NULL)
{
     tr=temp->data; // temp->data holds the value of the current node.
     Node *leftptr = temp, *rightptr = temp;
     while(tr!=0 && rightptr!=NULL) //moves right side
     {
          rightptr = rightptr->next;
          tr--;
     }
     tr=temp->data;
     while(tr!=0 && leftptr!=NULL) //moves left side
     {
          leftptr = leftptr->prev;
          tr--;
     }
}

両方のトラバーサル ルールを考慮して、アルゴリズムを実装し、トラバースする方法を選択できます。

于 2015-10-19T17:29:29.130 に答える