单链表与单循环链表的C语言实现
目录
- 单链表与单循环链表的C语言实现
- 单链表的增删查改
- 单循环链表的增删查改
单链表的增删查改
/*单链表*/#include<stdio.h>
#include<stdlib.h>typedef struct Node{int data;struct Node* next;
}Node;Node* initList(){Node* node = (Node*)malloc(sizeof(Node));node -> data = 0;node -> next = NULL;return node;
}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* tail = L -> next;Node* node = (Node*)malloc(sizeof(Node));node -> data = data;node -> next = NULL;while(tail -> next){tail = tail -> next;}tail -> next = node;L -> data ++;
}void deleList(Node* L,int data){int flag = 0;Node* prevnode = L;Node* node = L -> next;while(node){if(node -> data == data){prevnode -> next = node -> next;free(node);flag = 1;printf("已经把%d从链表里删除了\n",data);L ->data --;
// break;//!!!!!node = prevnode -> next;}else{prevnode = node;node = node -> next;}}if(!flag){printf("没有找到被删项\n");}
}void printList(Node* L){Node* node = L -> next;while(node){printf("%d\n",node -> data);node = node -> next;}printf("\n");
}void findList(Node* L, int data){Node* node = L -> next;while(node){if(node -> data == data){printf("已经在链表里找到了%d\n",data);break;}node = node -> next;}}void changeList(Node* L, int data, int newdata){Node* node = L -> next;while(node){if(node -> data == data){node -> data = newdata;printf("已经把链表里的%d更新为了%d\n",data,newdata); }node = node -> next;}}int main(){Node* L = initList();headInsert(L, 1);headInsert(L, 10);headInsert(L, 100);tailInsert(L,2);tailInsert(L,20);tailInsert(L,200);printList(L);deleList(L,100);deleList(L,6);findList(L,20);changeList(L,2,8);printList(L);return 0;
}
单循环链表的增删查改
#include<stdio.h>
#include<stdlib.h>typedef struct Node{int data;struct Node* next;
}Node;Node* initList(){Node* node = (Node*)malloc(sizeof(Node));node -> data = 0;node -> next = node;return node;
}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* tail = L -> next;Node* node = (Node*)malloc(sizeof(Node));node -> data = data;node -> next = L;while(tail -> next != L){tail = tail -> next;}tail -> next = node;L -> data ++;
}void deleList(Node* L,int data){int flag = 0;Node* prevnode = L;Node* node = L -> next;while(node != L){if(node -> data == data){prevnode -> next = node -> next;free(node);flag = 1;printf("已经把%d从链表里删除了\n",data);L ->data --;
// break;//!!!!!node = prevnode -> next;}else{prevnode = node;node = node -> next;}}if(!flag){printf("没有找到被删项\n");}
}void printList(Node* L){Node* node = L -> next;while(node != L){printf("%d\n",node -> data);node = node -> next;}printf("\n");
}void findList(Node* L, int data){Node* node = L -> next;while(node != L){if(node -> data == data){printf("已经在链表里找到了%d\n",data);break;}node = node -> next;}}void changeList(Node* L, int data, int newdata){Node* node = L -> next;while(node != L){if(node -> data == data){node -> data = newdata;printf("已经把链表里的%d更新为了%d\n",data,newdata); }node = node -> next;}}int main(){Node* L = initList();headInsert(L, 1);headInsert(L, 10);headInsert(L, 100);tailInsert(L,2);tailInsert(L,20);tailInsert(L,200);printList(L);deleList(L,100);deleList(L,6);findList(L,20);changeList(L,2,8);printList(L);return 0;
}