单链表:创建节点与插入节点&单链表的遍历

上次说到,一个完整的链表是由若干个节点组成的,那么在了解链表的基础知识后就要知道如何创建节点和插入节点,以及将链表遍历输出

1.创建节点

在创建节点之前,我们已经创建好了结构体和表头

//创建结构体
struct Node
{
	int data;
	struct Node* next;
};
//创建表头
struct Node* createlist()
{
	struct Node* head = (struct Node*)malloc(sizeof(struct Node));
	head->next = NULL;//头节点指向空
	return head;
}

 现在就要开始写一个创建节点的函数,以我们的数字链表为例,我们需要如下步骤

用代码实现如下

//创建节点
struct Node* createNode(int num)
{
	struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
	newNode->data = num;
	newNode->next = NULL;
	return newNode;//返回节点的地址
}

 2.插入节点

创建节点之后便需要将节点插入,而实际上更多的是将节点创建出来之后便插入,也就是说在插入的函数里嵌套调用创建链表的函数。插入也分为表头插入,表尾插入,乃至在中间插入。本文将介绍表头插入和表尾插入两种方式

(1)表头插入

表头插入顾名思义就是在表头的位置插入节点

第一步:创建一个新的节点

第二步:将新节点与头节点及头节点之后的节点相连

第三步:形成新的链表

 接下来用代码来实现一下

//表头法插入
struct Node* insertByHead(struct Node*head,int num)
{
	struct Node* newNode = createNode(num);//指向新节点的指针
	newNode->next = head->next;
	head->next = newNode;
	return newNode;
}

也就是说在创建新节点然后插入到表头

(2)表尾插入

表尾插入也就是将新创建的节点接在最后一个节点后面,这也是较为常用的一种插入方式,先通过图来详细看一下过程,过程与上面的表头插入类似,但多了一步寻找表尾

第一步:创建新的节点

第二步:从前到后寻找到最后一个节点

第三步:将新节点与原最后一个节点连接

第四步:形成新的链表

 下面用代码来实现一下,比表头插入多了一个从头到尾寻找的步骤,因此也多出了几行代码

//表尾法插入
struct Node* insertByEnd(struct Node* head, int num)
{
	struct Node* newNode = createNode(num);//指向新节点的指针
	while (head->next != NULL)   //从头到位一直往后,直到找到最后一个节点
	{
		head = head->next;
	}
	head->next = newNode;      //将新节点接在原最后一个节点后面
	return newNode;            //返回一个地址
}

可以看到与上面不同的是,这里多了一步从前到后查找的步骤

链表遍历

链表的遍历与数组的遍历类似,都是利用循环来完成的,但与数组遍历不同的是数组遍历可以利用循环控制变量来完成,而链表得到遍历大多需要判断节点是否为空

//链表的遍历
void printlist(struct Node* head)
{
	head = head->next;        //头节点一般不存放数据
	while (head != NULL)      //当节点不为空时即执行循环
	{
		printf("%d ", head->data);
		head = head->next;    //输出后移向下一节点
	}
	printf("\n");
}

(完)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值