1

リンク リスト プロジェクトを実装していて、ノードを構築するとします。

    struct node{

    node *prev;
    node *next;
    int data
    };
   node *sentinel;

次のようにリストに要素を追加し続ける add() メソッドを使用するたびに:

add(1);  //First node
add(2);  //Second  node
add(3);  //Third node
add(4);  //Fourth node
add(5);  //Fifth node;

追加が完了したら、テストを実行したいので、次のように言います。

node *temp = sentinel->next;

temp は最初の要素を指していますか? 私がしたらどうしますか:

node *temp = (sentinel->next)-next;

現在、temp は 2 番目の要素を指していますか?

はいの場合、なぜですか? そして、その主な目的は何ですか

node *sentinel; 

C++ を独学で教え始めたところです。皆さんの回答に本当に感謝します。

   Edit:

コンストラクターでセンチネルを次のように初期化します。

私の add() メソッドは次のようなものです。

add(int data, index)

{

 sentinel *temp = (sentinel->head); //Lets say temp points to the head of list here.
 node *toAdd = new node(); 
 toAdd->data = data;
 toAdd->next -> temp;
 temp->next = toAdd;

}

4

2 に答える 2

3

センチネル *temp =(センチネル->ヘッド); その線は真実ではないと思います。構造体でヘッドを初期化しないためです。したがって、sateniel=null; を初期化するだけです。

toAdd->data=data
\\then add
if(sateniel==null)
{
 sateniel=toAdd;
  sateniel->prev=null;
  node *temp=sateniel;
}
else
{
  toAdd->prev -> temp; 
  temp->next = toAdd;
  temp=toAdd;
}

次に、リストを移動してみてください

于 2013-10-02T04:54:28.743 に答える
1

を実行した後node *temp = (sentinel->next)->next;、3 番目の要素があると仮定すると、temp はそれを指す必要があります。これは、sentinel変数が常にリストの最初の要素を指すように存在するためです。したがって、このポインターを失うことはありません。これは、番兵値を設定してから最後の要素の次のポインタを設定することによって add メソッドが機能することを前提としています。

例として add メソッド:

void add(int data){
   //If the list is empty, set the sentinel value
   if(sentinel == 0){
       sentinel = new node();
       sentinel->data = data;
       sentinel->next = 0;
   }
   else{
      //Else, find the last element
      node* temp;
      //Loops until nodes next is null (node is last node)
      for(temp = sentinel;temp->next != 0;temp = temp->next);

      //Create the next node and set it to next
      temp->next = new node();
      temp->next->data = data;
      temp->next->next = 0;
   }
}
于 2013-10-02T03:59:36.030 に答える