我想设置头 - > 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;
}
}
答案 0 :(得分:1)
看起来 head 最终位于列表的末尾,所以当您从 head 遍历时, head &#39;打印s值并且traverse()停止,因为 head-&gt; next 为空。
您可以尝试让add_beg()返回 temp 指针,并使用add_beg()返回的最终值来调用traverse()。
答案 1 :(得分: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()进行上述更改。