#include <stdlib.h> #include<stdio.h> typedef struct Link//创结构体 { int data; struct Link* next; }link; link * creat(int x)//创链表结点 { link*new=malloc(sizeof(link)); new->data=x; new->next=NULL; } //无头节点,往前面放一个结点,并移动头指针至前面的结点 void tocha(link **phead,int x)//传入*head地址只能改变其中的值,若要改变指针指向的地址需要传入二级指针**p;head里存着*p的地址,*p是指向结构体的指针,即phead地址; { //*p 是个指针,头指针,指向结构体,一级指针p,是地址*p是存值的,可以改变*p的值, //二级指针p存*p的地址,*p是个地址,**p是值,可以改变*p(地址),和**p(值) if(*phead==NULL) { *phead=creat(x);//如果没得,指向一个新产生的结点 } link* new=creat(x); new->next=*phead;//新结点指向上一个结点,然后把头指针指向、新结点。此时新结点为第一个结点,适用于无头节点,需使用二级指针; *phead=new; /* new->next=*phead->next;适用于有头节点时,头指针不能变动位置,插头后面 *phead->next=new; */ } int main() { int a[9]={1,2,3,4,5,6,7,8,9};//头节点:link *head=malloc(sizeof(link));head->data=?,head->next=第二个结点位置 link *phead=creat(a[8]); printf("%d->",*phead->data);//指针指向第一个结点。data值应该是a[8] for(int i=7;i>=0;i--) { tocha(&phead,a[i]);//插入完成后,头指针应该指向了最前面一位,也就是data值为a[0]; } printf("%d->",*phead->data); }
时间: 2024-04-07 14:34:00 浏览: 9
在你的代码中,有一些小问题需要修复。首先,你的 `creat()` 函数没有返回新创建的节点,需要在函数末尾添加 `return new;` 语句。其次,你在 `main()` 函数中打印头节点的 `data` 值时,应该使用 `phead->data` 而不是 `*phead->data`。
下面是修复后的代码:
```c
#include <stdlib.h>
#include <stdio.h>
typedef struct Link
{
int data;
struct Link* next;
} link;
link * creat(int x)
{
link* new = malloc(sizeof(link));
new->data = x;
new->next = NULL;
return new;
}
void tocha(link **phead, int x)
{
if (*phead == NULL)
{
*phead = creat(x);
}
else
{
link* new = creat(x);
new->next = *phead;
*phead = new;
}
}
int main()
{
int a[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
link *phead = creat(a[8]);
printf("%d->", phead->data);
for (int i = 7; i >= 0; i--)
{
tocha(&phead, a[i]);
}
printf("%d->", phead->data);
return 0;
}
```
现在,代码会打印链表头指针指向结点的 `data` 值。请注意,在插入新节点时,我们将新节点插入到链表的头部,使其成为新的头节点。因此,在打印时,会先打印出最后插入的节点的 `data` 值,然后依次打印其他节点的 `data` 值。