0

これは、リンクされたリストの先頭に要素を追加する方法です

 //typedef void* VoidPtr
 //typedef node* NodePtr
 struct Node
   {
       NodePtr next
       VoidPtr data
   };


void LinkedList::Addelement(VoidPtr horoscope)
{
    if(head == NULL)
  {

    head = new Node;
    head->data = horoscope;
     head->next = NULL;

  }

NodePtr temp = new Node;

temp -> data = horoscope;
temp -> next = head;

head = temp;
}

これは、リンクされたリストの末尾に要素を追加する方法です

void LinkedList::addelementfromback(VoidPtr horoscope)
{
   NodePtr temp=head;

   if(head == NULL)
   {

    head = new Node;
    head->data = horoscope;
    head->next = NULL;

   }

   while( temp->next != NULL)
   {
      temp=temp->next

   }

   NodePtr element=New Node;
   element->data=horoscope;
   element->next=NULL;

    temp->next=element;



}

リンクされたリストの先頭に追加するために temp=element を使用する理由がわかりませんが、リンクされたリストの末尾に追加するには、temp->next=element を使用します。リンクされたリストの末尾に要素を追加するために while temp=next を使用できない理由がわかりません

4

2 に答える 2

1

リストが空 ( ) の場合、新しいノードを指すだけでよいため、このAddelementメソッドにはelse句が必要です。リストには他にノードはありません。 head == NULLhead

また、 void ポインターを使用するのではなく、テンプレートを使用することを検討してください。テンプレートは、スタックやリンク リストなどの構造やアルゴリズムではなく、データ型が変化するデータ構造やアルゴリズムに最適です。

ノード ポインターをデータ項目から 2 つの別個の構造として分離することを検討することをお勧めします。これは、単一リンク リストと二重リンク リストの間で共通のコードを使用するのに役立ちます。テンプレートを使いたくない場合にも役立ちます。

struct Node_Link
{
    Node_Link * next;
};

struct Node_Integer
: public Node_Link
{
    int data;
};

struct Node_Double
: public Node_Link
{
   double data;
};

struct Node_String
: public Node_Link
{
    std::string data;
};
于 2013-02-03T18:57:55.120 に答える
1

の最後にaddelementfrombackあるtempのは、リストの最後の要素へのポインターです。あなたが言うならtemp = element、ローカルポインターに新しい値を与えるだけなので、これはリストを変更しません。

temp->nextただし、nextオブジェクトがtemp指している内部に格納されている変数 (つまり、リストの最後の要素) は、新しい要素を指すようにこの値を変更する必要があります。

が新しい要素へのポインターである場合、同じ要素を指すようにポインターを割り当て、Addelementこの指す先の要素内の変数を元のヘッドを指すように変更します。tempheadnext

于 2013-02-03T18:49:25.537 に答える