数据结构之单向循环链表

概述

单向循环链表里面的每一个节点的next都要有指向,最后一个节点的next指向head节点
单向循环链表跟普通的单链表的操作逻辑几乎—模一样,唯一的区别,结尾的判断,区别如下

建议学完单向非循环链表,再来对比
(本人先是在掘金上编辑的,然后复制粘贴自己的博客,所以图片都有掘金的水印,欢迎来我的掘金博客查看原文)

image.png

示例代码

//单向循环链表
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

typedef int DataType;

typedef struct Node
{
	DataType data;
	struct Node *next;
}listnode, *singly_list;

//typedef struct Node listnode;
//typedef struct Node *singly_list; 

//初始化链表
singly_list init_list(void)
{
	//为链表申请一个节点作为头结点
	singly_list head = malloc(sizeof(listnode));
	if (head != NULL)
	{
		head->next = head;
	}
	return head;
}

//判断空链表
bool empty(singly_list head)
{
	return head->next == head;
}

//新建节点
singly_list create_node(DataType data)
{
	singly_list new = malloc(sizeof(listnode));
	if (new != NULL)
	{
		new->data = data;
		new->next = NULL;
	}
	return new;
}

//插入节点(尾插)
void insert_node(singly_list head, singly_list new)
{
	//如果不为空,就要找到链表的最后一个节点
	singly_list p = head;
	//如果下一个节点不为空,就一直往后找,直到这个节点的next为空
	while(p->next != head)
	{
		p = p->next;
	}
	new->next = head;
	p->next = new;
}

//插入节点(头插)
void tail_node(singly_list head, singly_list new)
{
	new->next = head->next
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jianglongyin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值