C语言 - 单向链表建立

 

单向链表建立:插入头节点,尾部插入节点

参考连接:https://www.cnblogs.com/lanhaicode/p/10304567.html

 


 #include <stdio.h>
 #include <stdlib.h>

struct link *ListInit(struct link *head);
struct link *AppendNode(struct link *head,int din);
void DisplayList(struct link *head);
void DeletMemory(struct link *head);

struct link
{
	int data;
	struct link *next;
};

int main(void)
{
	int i = 0;
	struct link *head = NULL; //链表头指针
	head = ListInit(head); //初始化链表头节点
	
	while(i <= 4)
	{
		//向链表尾部添加节点,并返回头指针
		head = AppendNode(head,i);

		//显示链表各个节点
		DisplayList(head);
		printf("节点显示完毕\n\n");
		
		
		i++;
	}
	
	DeletMemory(head);
	return 0;
}


函数功能:初始化链表,新建一个空的头节点
返回值:结构体指针
struct link *ListInit(struct link *head)
{
	struct link *p = NULL;
	
	申请分配内存空间
	p = (struct link *)malloc(sizeof(struct link));
	
	if(NULL == p){
		printf("内存空间不足,链表初始化失败\n");
		exit(0);
	}
	
	head = p;
	
	p->next = NULL;
	
	return head;
	
}

函数功能:链表尾部添加节点
返回值:结构体指针
struct link *AppendNode(struct link *head,int din){
	struct link *p = NULL;
	struct link *pr = head;
	int data = din;
	
	p = (struct link *)malloc(sizeof(struct link));
	
	if(NULL == p){
		printf("内存空间不足\n");
		exit(0);
	}
	
	if(NULL == head){ //链表为空
		//新建节点设置为头节点
		head = p;		
	}
	else{
		//移动头指针到链表尾部
		while(NULL != (pr->next)){
			pr = pr->next;
			
		}
		
		//新建节点添加到链表尾部
		pr->next = p;
		
		p->data = data;
		p->next = NULL;
		
	}
	
	return head;
	
}



函数功能:打印链表各个节点
返回值:无
void DisplayList(struct link *head)
{
	int i = 0;
	struct link *p = head;
	
	while(NULL != p){
		printf("%d,%d\n\n",i,p->data);
		p = p->next;
		i++;
	}
	
}


函数功能:释放链表存储空间
返回值:无
void DeletMemory(struct link *head)
{
	struct link *p = head;
	struct link *pr = NULL;
	
	while(NULL != p){
		pr = p; //保存当前节点指针
		p = p->next;//下一个节点指针
		free(pr);//释放当前节点内存
	}
	
}





 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值