链表基础版
本片文章是为即将期末考试的同学提供的一个链表的小模板,链表操作还有很多,本片文章仅仅展示出了链表最基本的增删改查的功能。
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
//链表结构体定义
typedef struct node{
int data;
struct node*next;
}Node;
//链表初始化
Node * InitializeList(){
Node * head=(Node *)malloc(sizeof(Node));
head->next=NULL;
head->data=0;
return head;
}
//头插法
void headInsert(Node *list,int a){
Node * new=(Node *)malloc(sizeof(Node));
new->data=a;
new->next=list->next;
list->next=new;
}
//尾插法
void backInsert(Node *list,int a){
Node * new=(Node *)malloc(sizeof(Node));
Node * pre=(Node *)malloc(sizeof(Node));
new->data=a;
pre=list;
if(list->next==NULL){
new->next=list->next;
list->next=new;
}else{
while(pre->next!=NULL){
pre=pre->next;
}
new->next=pre->next;
pre->next=new;
}
}
//输出链表
void printlist(Node * list){
Node * pre=(Node*)malloc(sizeof (Node));
pre=list->next;
while(pre!=NULL){
printf("%d",pre->data);
pre=pre->next;
}
}
//查找
Node *serchNode(Node *list,int x){
Node * currect=(Node *)malloc(sizeof(Node));
currect=list->next;
while(currect!=NULL&&currect->data!=x){
currect=currect->next;
}
return currect;
}
//删除单一
void delet(Node *list,int x){
Node *pre=(Node *)malloc(sizeof(Node));
Node *save=(Node *)malloc(sizeof(Node));
save=list->next;
pre=list;
while(save->data!=x&&save!=NULL){
pre=pre->next;
save=save->next;
}
pre->next=save->next;
free(save);
}
//删除重复节点
void delet2(Node *list,int x){
Node *pre=(Node *)malloc(sizeof(Node));
Node *save=(Node *)malloc(sizeof(Node));
save=list;
while(save->next!=NULL){
if(save->next->data==x){
pre=save->next;
save->next=pre->next;
}else{
save=save->next;
}
}
}
//小测试
int main(){
Node *list;
list=InitializeList();
backInsert(list,3);
backInsert(list,4);
backInsert(list,5);
backInsert(list,3);
// delet(list,3);
delet2(list,3);
/* headInsert(list,4);
headInsert(list,5);
headInsert(list,6);
headInsert(list,7);
printlist(list);*/
printlist(list);
return 0;
}
这小编的第一篇文章,很高兴认识大家,有许多不足,可以留言交流,我会在以后更新更多的编程学习有关知识。