数据结构基础-C/C++实现单链表(带头结点)

  1. 定义结构体
/**
 * @brief 链表节点 
 */
typedef struct LinkedNode{
   
   
	// 存储数据  
	int data;
	// 下一个节点的地址 
	LinkedNode *next;	
}LinkedNode, *LinkedList;
  1. 初始化
/**
 * @brief 初始化一个带头结点的单链表
 * 
 * @return LinkedList 单链表的头节点
 */
LinkedList initLinkedListHaveHead() {
   
   
	// 为单链表申请一块内存空间,最为头节点
	LinkedList list = (LinkedNode *)malloc(sizeof(LinkedNode));
	// 初始化头节点之后无数据
	list -> next = NULL;
	return list;
}
  1. 判空
/**
 * @brief 有头节点的单链表是否为空
 * 
 * @param l 有头节点的单链表
 * @return true 为空
 * @return false 不为空
 */
bool isEmptyHaveHead(LinkedList l) {
   
   
	// 有头节点判断头节点的next是否为null
	return l -> next == NULL;
}
  1. 遍历打印
/**
 * @brief 遍历打印带头结点单链表
 * 
 * @param list 有头结点单链表
 */
void haveHeadPrint(LinkedList list) {
   
   
	LinkedNode *node = list -> next;
	int i = 0;
	while (node != NULL) {
   
   
		cout << "data" << i << ":" << node -> data << "\n" << endl;
		node = node -> next;
		i++;
	}
	
}
  1. 第一个位置插入
/**
 * @brief 有头节点的单链表在第一个位置插入
 * 
 * @param list 有头节点的单链表
 * @param data 要插入的数据
 * @return true 插入成功
 * @return false 插入失败
 */
bool haveHeadInsertToFirst(LinkedList &list, int data) {
   
   
	// 如果链表为空不进行插入
	if(list == NULL) {
   
   
		return false;
	}
	// 为新节点申请内存空间
	LinkedNode *node = (LinkedNode *)malloc(sizeof(LinkedNode));
	// 新节点数据赋值
	node -> data = data;
	// 新节点的next指针指向头节点的next
	node -> next = list-> next;
	// 头节点的next指向新节点
	// 上面一部和这一步顺序不能调换不然将会丢失头节点之后的所有数据
	list -> next = node;
	return true;
}
  1. 按位查找
/**
 * @brief 有头节点按位查找
 * 
 * @param list 有头节点的单链表
 * @param index 要查找的下标(0开始)
 * @return LinkedNode* 节点指针
 */
LinkedNode* haveHeadGetByIndex(LinkedList &list, int index) {
   
   
	// 链表为空无法操作
	if (isEmptyHaveHead(list)) {
   
   
		return NULL</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值