版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37787043/article/details/79859486
#include<stdio.h>
#include<strings.h>
#include<stdlib.h>
//目的 从链表尾部插入新节点
struct node
{
int data; //有效数据
struct node *pNext; //指向下一个节点的指针
};
void insert_tail(struct node *pHeader,struct node *new)
{
struct node *p = pHeader;
while(NULL != p->pNext) // 目的是找到最后一个节点,最后一个节点的p指向NULL
{
p = p->pNext;
}
p->pNext = new;
}
//作用:创建一个链表节点
//返回值:指针指向我们函数新创建的一个节点的首地址
struct node *create_node(int data) //接收参数data
{
struct node *p = (struct node *)malloc(sizeof(struct node)); //p只是一个局部变量
if(NULL == p)
{
printf("malloc error \n");
return NULL; // 不是返回-1
}
//清理申请的堆内存
bzero(p,sizeof(struct node));
//填充节点
p->data = data;
p->pNext = NULL; //将来要指向下一个地址的首地址
//实际操作时将下一个节点malloc返回的指针赋值给这个节点
return p; //返回指针p
}
int main(void)
{
//struct node *pHeader = NULL;
struct node *pHeader = create_node(200);
insert_tail(pHeader,create_node(300));
insert_tail(pHeader,create_node(400));
insert_tail(pHeader,create_node(4));
//访问链表中第一个有效数据
printf("node1 data:%d\n",pHeader->data);
//访问链表中第二个有效数据
printf("node2 data:%d\n",pHeader->pNext->data);
//访问链表中第三个有效数据
printf("node3 data:%d\n",pHeader->pNext->pNext->data);
return 0;
}