2.单循环链表
data|next——>data|next——>data|next——>头节点
1.初始化链表
2.增加节点(头插法、尾插法)
3.删除节点
4.遍历链表
定义一个链表(结构体),定义一个数据结构,存放data域和指针域:
- typedef struct Node {//定义一个结构体,存放data域和指针域
- int data;//数据域类型
- struct Node* next;
- }Node;//定义一个链表Node
初始化链表:
- Node* initList() {//初始化链表
- Node* L = (Node*)malloc(sizeof(Node));//开辟空间 L:头指针
- L->data = 0;//data域
- L->next = L;//下一个节点指向
- return L;
- }
头插法:
- void headInsert(Node* L, int data) {//头插法 传入头指针L
- Node* node = (Node*)malloc(sizeof(Node));//创建指针变量并开辟空间
- node->data = data;
- node->next = L->next;//头指针指向新节点 新节点指向原先头节点
- L->next = node;
- }
尾插法 :
- void tailInsert(Node* L, int data) {//尾插法
- Node* n = L;//链表L
- Node* node = (Node*)malloc(sizeof(Node));//新建指针变量
- node->data = data;
- while (n->next != L) {//判断是否是最后一个节点
- n = n->next;
- }
- node->next = L;//指针变量指向L
- n->next = node;//n指向的next等于node
- }
删除:
- #define TRUE 1
- #define FALSE 0
-
- int Delete(Node* L, int data)//删除
- {
- Node* preNode = L;//记录每次循环的前一个结点
- Node* node = L->next;
- while (node != L)
- {
- if (node->data == data) {
- //delete
- preNode->next = node->next;
- free(node);
- return TRUE;
- }
- preNode = node;//如果没有的话
- node = node->next;
- }
- return FALSE;
- }
遍历链表:
- void printList(Node* L) {//遍历链表
- Node* node = L->next;//定义一个链表给他赋值L链表
- while (node != L) {//链表不为空
- printf("%d->", node->data);//打印
- node = node->next;//node指向node的next指针
- }
- printf("NULL\n");
- }
main函数:
- int main()
- {
- Node* L = initList();
- headInsert(L, 1);
- headInsert(L, 2);
- headInsert(L, 3);
- headInsert(L, 4);
- headInsert(L, 5);
- tailInsert(L, 6);
- tailInsert(L, 7);
- tailInsert(L, 8);
- tailInsert(L, 9);
- tailInsert(L, 10);
- printList(L);
- Delete(L, 4);
- Delete(L, 5);
- printList(L);
- return 0;
- }
单循环链表函数
- typedef struct Node {//定义一个结构体,存放data域和指针域
- int data;//数据域类型
- struct Node* next;
- }Node;
-
- Node* initList() {//初始化链表
- Node* L = (Node*)malloc(sizeof(Node));
- L->data = 0;
- L->next = L;
- return L;
- }
-
- void headInsert(Node* L, int data) {//头插法
- Node* node = (Node*)malloc(sizeof(Node));
- node->data = data;
- node->next = L->next;
- L->next = node;
- }
-
- void tailInsert(Node* L, int data) {//尾插法
- Node* n = L;
- Node* node = (Node*)malloc(sizeof(Node));
- node->data = data;
- while (n->next != L) {
- n = n->next;
- }
- node->next = L;
- n->next = node;
- }
-
- #define TRUE 1
- #define FALSE 0
-
- int Delete(Node* L, int data)//删除
- {
- Node* preNode = L;
- Node* node = L->next;
- while (node != L)
- {
- if (node->data == data) {
- //delete
- preNode->next = node->next;
- free(node);
- return TRUE;
- }
- preNode = node;
- node = node->next;
- }
- return FALSE;
- }
- void printList(Node* L) {//遍历链表
- Node* node = L->next;
- while (node != L) {
- printf("%d->", node->data);
- node = node->next;
- }
- printf("NULL\n");
- }
-
- int main()
- {
- Node* L = initList();
- headInsert(L, 1);
- headInsert(L, 2);
- headInsert(L, 3);
- headInsert(L, 4);
- headInsert(L, 5);
- tailInsert(L, 6);
- tailInsert(L, 7);
- tailInsert(L, 8);
- tailInsert(L, 9);
- tailInsert(L, 10);
- printList(L);
- Delete(L, 4);
- Delete(L, 5);
- printList(L);
- return 0;
- }
运行结果:
