单链表
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