C语言实现单链表

本文详细介绍了单链表的创建、插入方法(头插法、尾插法、有序插入)、遍历、删除节点、判断链表为空、逆序以及清除链表,还提及了单循环链表的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单链表

1、单链表的创建

单链表的结构

typedef int datatype;
typedef struct node{
     datatype data;
	 struct node *next;
}linknode;

创建单链表

linknode* create_linklist(){
linknode *head=(linknode *)malloc(sizeof(linknode));

if(NULL==head){printf("malloc sail!\n");}
head->data=0;
head->next=NULL;
return head;
}

2、单链表的插入

1、头插法

void head_insert(linknode *head,datatype data){


	linknode *new_node=(linknode*)malloc(sizeof(linknode));
	new_node->data=data;
	new_node->next=head->next;
	head->next=new_node;

}

2、尾插法

void insert_tail(linknode *head,datatype data){
	linknode *tail=head;
	linknode *new_node=(linknode *)malloc(sizeof(linknode));
	while(tail->next!=NULL){tail=tail->next;}
	new_node->data=data;
	new_node->next=NULL;
	tail->next=new_node;

}

3、有序插入:按照指定顺序插入

void insert_order(linknode *head,datatype data){
linknode *p=head;
while(p->next!=NULL&&p->next->data<=data){
p=p->next;
}
linknode *new_node=(linknode *)malloc(sizeof(linknode));
new_node->data=data;
new_node->next=p->next;
p->next=new_node;


}

3、单链表的遍历

void print_linklist(linknode *head){
linknode *p=head;
while(p->next!=NULL){
printf("%d ",p->next->data);
p=p->next;
}
}

4、单链表的删除

void delete_node(linknode *head,datatype data){
  linknode *p=NULL;
  linknode *q=NULL;
  p=head;
  while(p->next!=NULL){
   if(p->next->data==data){
	   q=p->next;
	   p->next=q->next;
	   free(q);
   }
   else{
   p=p->next;
   
   }
  }
}

5、单链表判空

head->next==NULL;

6、单链表的逆序

void reverse(linknode *head){

linknode*p=NULL,*q=NULL;
p=head->next->next;
head->next->next=NULL;
while(p!=NULL){
q=p->next;
p->next=head->next;
head->next=p;
p=q;

}

}

7、单链表的清除

void clean_up_linklist(linknode *head){

linknode *p=head;
linknode *q=NULL;
while(p!=NULL){
q=p->next;
free(p);
p=q;
}
return;

}

8、单循环链表

只需注意判空时

head->next==head
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值