#include <stdio.h>
#include <stdlib.h>
//循环链表的实现
typedef struct Node{
int data;
struct Node* next;
}Node;
Node* initNode(){
Node* L=(Node*)malloc(sizeof(Node));
//数据记作0方便以后寻找尾结点
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;
L->data++;
}
//尾插法
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;
L->data++;
}
//遍历
void printfList(Node* L){
Node* node=L->next;
while (node!=L){
printf("%d ",node->data);
node=node->next;
}
printf("NULL\n");
}
//删除节点
int deletNode(Node* L,int data){
Node* node=L->next;
//设置每次循环的前一个结点
Node* preNode=L;
while (node!=L){
if(node->data==data){
preNode->next=node->next;
free(node);
return 1;
}
preNode=node;
node=node->next;
}
return 0;
}
int main() {
Node* L=initNode();
headInsert(L,1);
headInsert(L,2);
headInsert(L,3);
headInsert(L,4);
tailInsert(L,6);
tailInsert(L,7);
printfList(L);
deletNode(L,4);
deletNode(L,7);
printfList(L);
return 0;
}
c语言实现循环链表代码
最新推荐文章于 2024-07-27 11:31:51 发布
871

被折叠的 条评论
为什么被折叠?



