-3

head-> data = 10に設定してから、リンクリストの先頭に10個の値(101-110)を追加しようとしています。

現在、出力を取得しています:10

誰かが私を助けることができますか?

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
struct node
{
 int data;
 struct node *next;
};
void main()
{
 struct node *head, emp;
 int num = 10, i;
 void add_beg(struct node *q, int n);
 void traverse(struct node *q);
 clrscr();
 head = (node*)malloc(sizeof(node));
 head->data = num;
 head->next = NULL;
 for (i= 101; i<=110; i++)
 {
  add_beg(head, i);
 }

 traverse(head);
 getch();

}

void add_beg(struct node *q, int num)
{
 int n = num;
 struct node *temp;
 temp = (node *)malloc(sizeof(node));
 temp->data = n;
 temp->next = q;
 q = temp;
}

void traverse(struct node *q)
{
while(q!=NULL)
  {
   printf("%d\n",q->data);
   q = q->next;
  }
}
4

2 に答える 2

1

void add_beg(struct node *q, int num)に変更する必要がありますvoid add_beg(struct node **q, int num)

渡されたポインタは変更できません。つまり、実際のアドレスがコピーされ、add_beg()の外部では変更されません。つまり、ポイントされた値は変更できます。したがって、ポインターへのポインターがある場合は、ポインターへのポインター(ヘッド)を変更できます。

add_beg(&head, i);したがって、ヘッドをメイン関数に戻すには、前述のadd_beg()への変更を加えて、このように呼び出す必要があります。

于 2012-08-08T19:37:46.377 に答える
1

headがリストの最後にあるように見えるため、 headからトラバースすると、headの値が出力され、 head->nextが null であるため traverse() が停止します。

add_beg() が一時ポインターを返すようにして、traverse() の呼び出しに add_beg() が返す最終値を使用することができます。

于 2012-08-08T19:28:29.470 に答える