【超详细】C语言建立单链表方法(尾插法)

#这是我个人用C语言编写的建立单链表的方法,内容比较详细,适合初学者参考,有不专业的地方,还望各位老师不吝赐教!

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

//PART1
typedef struct node {
	int data;									//结构体node中,存储一个整型变量data
	node* next;									//结构体node中,存储一个指向结构体类型变量的指针next
}Node;	
//我们将node结构体的声明符修改为Node,在声明新结构体,就可以使用Node A,简单快捷

//PART2 函数function
Node* function(int* array, int length) {
//这是一个Node*型的函数function,接收一个整型数组array,返回一个指向头结点的指针
	
	Node* head = (Node*)malloc(sizeof(Node*));		//2.1 动态申请一个名称为head的Node*指针类型的头节点
	head->data = -1;								//2.1.1 头结点的data不存储数据
	head->next = NULL;
	Node* point = head;								//2.2 创建一个point指针,可以移动,首先指向head结点

	for (int i = 0; i < length; i++) {
	//循环建立数组长度的个数的结点
		Node* now = (Node*)malloc(sizeof(Node*));	//2.3 动态申请一个名称为now的Node*指针类型的节点
		//这里申请的为什么是指针Node*型?是因为我们函数返回值为Node*指针,链表每个结点类型需统一~
		now->data = *(array++);						//2.3.1 初始化结点now,访问指针结点成员需要用"->"
		//这里为什么是*(array++),是为了顺序调用数组的每一个元素,直到array指针越界
		now->next = NULL;							//2.3.2 初始化now成员next指针为空指针,指向NULL

		point->next = now;							//2.4.1 让point指针指向的结点的next成员指向新建结点now
		point = point->next;						//2.4.2 让point指针指向下一个结点,保证它指向链表尾部 
	}

	return head;									//2.5 返回的是Node型指针,头指针head
}

//PART3 主函数
int main()
{
	int a[] = { 1,2,3,4,5,6,7,8,9 };				//3.1 a作为我们的验证数组,可以以其它方式创建
	int length = sizeof(a) / sizeof(int);			//3.2 获取数组长度length
	//printf("%d\n", length);
	Node* list = function(a, length);				//3.3 声明结点指针Node*型变量list,指向返回值头结点
	
	Node* p = list->next;							//3.4 验证程序,让p指向链表第一个结点
	while (p) {										//3.5 在p不为空指针时,调取p指向的结点的数据data
		printf("%d ", p->data);
		p = p->next;								//3.5.1 每次调用过后,p都会指向下一个结点
		//注:当p指向链表尾部的结点,由于function中每一次初始化都让结点的next指向了空NULL
		//最后一个结点的next没有被修改,所以仍然指向空
	}

	return 0;
}

如有疑问,欢迎多多交流!

  • 6
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值