-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

看起来head最终位于列表的末尾,因此当您从head遍历时,打印head的值并且 traverse() 停止,因为head->next为空。

您可以尝试让 add_beg() 返回临时指针,并使用 add_beg() 返回的最终值来调用 traverse()。

于 2012-08-08T19:28:29.470 回答
1

您需要更改void add_beg(struct node *q, int num)void add_beg(struct node **q, int num).

传递的指针不能更改,我的意思是实际地址被复制并且不会在 add_beg() 之外更改,指向的值可以更改。所以如果你有一个指向指针的指针,你可以改变指向的指针(head)。

因此,要让头回到您的主函数,您需要像这样调用它add_beg(&head, i);,并对 add_beg() 进行上述更改。

于 2012-08-08T19:37:46.377 回答