2017-06-18 2 views
2

ダブルリンクリストを作成しようとしていますが、2つの関数があります。最初は要素をテールに追加し、2番目は要素を追加することになっていますが、機能しません。ダブルリンクリストの要素をヘッドに追加する

void AddNodeEnd (char addData) 
    { 
     nodePtr NewNode = new node; 
     NewNode->next = NULL; 
     NewNode->data = addData; 


     if (head != NULL) 
     { 
      curr = head; 
      while(curr->next != NULL) 
      { 
       curr = curr->next; 
      } 
      curr->next = NewNode; 
     } 
     else 
     { 
      head = NewNode; 
     } 
    } 
    void AddNodeHead (char addData) 
    { 
     nodePtr NewNode = new node; 
     NewNode->prev = NULL; 
     NewNode->data = addData; 

     head->prev = NewNode; 
     NewNode->next = head; 
     NewNode->prev = NULL; 
    } 
+2

新しいノードを指すように 'head'メンバー変数を更新しません。 – BoBTFish

+0

OOP(クラスなど)の使用についての考え –

+0

'head'と' tail'の両方を保存しないのはなぜですか? –

答えて

1

headは、リストの最初の要素へのポインタであると仮定します。

リストの先頭に新しいノードを追加すると、新しいノードが先頭になります。 リストの先頭に要素を追加した場合、最後に割り当てる必要があるのはhead = newNodeです。

void AddNodeHead (char addData) 
{ 
    nodePtr NewNode = new node; 
    NewNode->prev = NULL; 
    NewNode->data = addData; 

    if (head != NULL)  // consider an empty list 
     head->prev = NewNode; 
    NewNode->next = head; // this also works for an empty list 
    head = newNode;   // <- this is missing in your code 
} 
0

ノードを追加するときに、headを新しいノードに更新しません。その他の機能については

void AddNodeHead (char addData) 
{ 
    ... 
    NewNode->next = head; 
    NewNode->prev = NULL; // you have this twice, not needed 
} 

head場合はNULLありますか?そのprevメンバーにアクセスしようとします。その結果、実行時エラーが発生します。

関連する問題