单循环链表
前言
C语言单循环链表的记录
一、结构和初始化
typedef struct Node { //定义一个Node的结构体
int data; //data数据域
struct Node* next; //next指针域
}Node;
Node* initlist(void) //初始化链表
{
Node* list = (Node*)malloc(sizeof(Node*)); //开辟一个list内存
list->data = 0; //记录链表的长度
list->next = list; //下一个节点指向本身,形成循环
}
二、插入和删除
1.头插法
代码如下(示例):
void headInsert(Node* list, int data) //头插法
{
Node* node = (Node*)malloc(sizeof(Node*)); //node
node->data = data; //接收插入数据
node->next = list->next; //node指向list的下一个
list->next = node; //list的下一个就是node
list->data++; //对list的data++
}
2.尾插法
代码如下(示例):
void tailInsert(Node* list, int data) //尾插法
{
Node* head = list; //保存头部
Node* node = (Node*)malloc(sizeof(Node*)); //node
node->data = data; //node保存数据
while (list->next != head) //当list的下一个节点是头就退出
{
list = list->next; //继续找list的下一个
}
node->next = list->next; //node的下一个就是list的下一个
list->next = node; //list的下一个是node
head->data++; //头部的data++
}
3.删除
代码如下(示例):
void deleteList(Node* list, int data) //删除
{
Node* node_pur = list; //nodepur指向当前遍历的前一个
Node* node = list->next; //node指向当前
while (node != list) //当node不是头部
{
if (node->data == data)
{
node_pur->next = node->next; //nodepur的下一个指向node的下一个
free(node); //释放node
list->data--; //头部data值--
break;
}
node_pur = node; //nodepur移动到下一个
node = node->next; //node移动到下一个
}
}
总结
若有错误地方请指出,谢谢、