0

ノードとリストの構造体が次のように定義された単一リンクリストがあります。

typedef struct _node
{
   int data;
   node* next;
} node;

typedef struct _list
{
   node* start;
} list;

リストから特定の値の先頭のエントリを削除する関数を作成しましたが、意図したとおりに機能していないようです。関数を実行してリストを再印刷すると、要素がなくなる代わりに、その場所に大きな値が表示されます (約 134520848)。定義された値の先頭の値を削除するための私の関数は次のとおりです。

void removeLead(list* l, int n)
{
   node* current = l->start;
   node* temp = NULL;

   while (current->data == n)
   {
      temp = current;
      l->start = current->next;
      free(temp);
   }
}

4 つの主要な値 == n がある場合、実行後removeLead()、~134520848 の 3 つの先行エントリがあります。

4

1 に答える 1

3

コードに誤りがあります。現在の変数を再割り当てしていません。

void removeLead(list* l, int n)
{
   node* current = l->start;
   node* temp = NULL;

   while (current->data == n)
   {
      temp = current;
      current = current->next;
      if(l->start == temp)
          l->start = current;
      free(temp);
   }
}
于 2012-06-21T04:09:34.987 に答える