写了一个链表头插的代码,预期效果是0插到10前面,但是出错了。
(用全局变量试了一遍发现成功,但是不太清除为什么,难道head_insert()里进行的操作对original的链表不起作用?不应该啊,传的是结构体指针,是地址传递呀。)
如上,求助大佬。代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node
{
int data;
struct node *pnext;
} NODE;
NODE *create_node(int datain)//创建结点,存储输入的数据,返回指向新结点的指针
{
NODE *pnode;
pnode=(NODE *)malloc(sizeof(NODE));//申请结点
memset(pnode,0,sizeof(NODE));//初始化
pnode->data=datain;//输入数据
pnode->pnext=NULL;//指向NULL,不要garbage value
return pnode;
}
void head_insert(NODE *phead,NODE *pnew)//链表头插,输入头指针和指向新结点的指针
{
pnew->pnext=phead;//step1:新结点指向第一个数据结点
phead=pnew;//step2:头指针指向新结点
}
void free_list(NODE *phead)//释放链表,输入头指针
{
NODE *p,*freep;
p=phead;
while(p!=NULL)
{
freep=p;
p=p->pnext;
free(freep);
}
}
int main(void)
{
NODE *header;
header=create_node(10);//创建第一个数据结点
NODE *pnew;
pnew=create_node(0);//新结点
head_insert(header,pnew);//头插
NODE *p;
p=header;
while(p!=NULL)
{
printf("%d\n",p->data);
p=p->pnext;
}//遍历输出,预期效果: 0\n 10\n
free_list(header);//释放内存
return 0;
}