简单易上手的链表基础(c语言版)

链表基础版

本片文章是为即将期末考试的同学提供的一个链表的小模板,链表操作还有很多,本片文章仅仅展示出了链表最基本的增删改查的功能。

#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;
}

这小编的第一篇文章,很高兴认识大家,有许多不足,可以留言交流,我会在以后更新更多的编程学习有关知识。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值