2

テストを取り戻したところ、2つしか見つけられず、教授は戻ったときに正しい答えを教えてくれませんでした。リンクリストのこのコードで4つのエラーを見つけるのを手伝ってくれるかどうか疑問に思っています...

int main() {
  struct node 
 {
     int data;
     node * next; 
 }

// create empty list
node * list;

// insert six nodes at front of list
node *n;
for (int i=0;i<=5;i++)
{
  n = new node;
  n->data = i;
  n->next = list;
}
// print list
n = list;
while (!n) 
{
  cout << n->data << "  ";
  n = n->next; 
}
cout << endl;
4

4 に答える 4

5
  • struct node;宣言の最後にありません
  • listに初期化されていませんNULL
  • listノード挿入後に頭を指していない
  • ノードの割り当てが成功したかどうかがチェックされていません
  • 印刷ループが正しくありません-while(n)代わりにwhile(!n)
于 2012-12-14T17:23:30.073 に答える
2

リストを初期化する必要があります

 list = NULL;

常にn->リストの隣に割り当てますが、リストに値を指定しないでください。

for (int i=0;i<=5;i++)
{
  n = new node;
  n->data = i;
  n->next = list;
  list=n;
}

!なしである必要があります または、何も印刷されません。

while (!n) 
于 2012-12-14T17:18:07.613 に答える
1

私の頭のてっぺんから(いくつかはすでに他の人によって指摘されています...):

  1. 定義;後はありませんstruct
  2. list初期化されていません
  3. listすべてのポインタに割り当てられていnextますが、更新されることはありません
  4. nから割り当てられた(初期化されていない)値はlist、これまでに行ったことをすべて破棄します(メモリリーク)
  5. main()エンディング}がありません(投稿しなかったものが他にもある場合はエラーではない可能性があります)
  6. ループの状態が間違っていwhileます-ループしている間だけn == 0
于 2012-12-14T17:29:27.213 に答える
0

エラー

1.1。node * list

すべてのノードが同じポインタを指しているため。それらはすべて1つのアイテムのみを指します(リストにはなりません)

2.2。while(!n)

while(n)である必要があります。そうでない場合は、何も出力されません。

3.listは何にも割り当てられません

node * list空のリストを作成しますが、このリストはnullに初期化されていません

4.struct nodeセミコロンを逃します;

5.ポスト初期化node * listはまだ空で、どこにも行きません。すべてのノードがそれを指し、コードが無秩序に分解されます!

于 2012-12-14T17:26:09.307 に答える