单链表与单循环链表的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;
}
