C语言实现单链表的头插法、尾插法、链表翻转、删除节点和输出
程序员文章站
2024-03-22 11:20:52
...
C语言实现单链表的头插法、尾插法、链表翻转、删除节点和输出
1.首先创建单链表的结构体
typedef struct Node{
int data;
struct Node* next;
}Linklist;
2.创建头节点
//创建头结点
Linklist *creat(){// 创建一个链表,即创建一个头结点
Linklist *head;
head=(Linklist *)malloc(sizeof(Linklist));//创建一个头结点
head->next=NULL;
return head;
}
3.头插法创建单链表
//头插法
Linklist *head_insert(Linklist *head,int value){
Linklist *p,*t;//h指向头结点,p用来创建即将要插入的节点
t=head;//t和head的变化是同步的
p=(Linklist *)malloc(sizeof(Linklist));
p->data=value;
p->next=t->next; //t->next=NULL ;即把链尾指向NULL
t->next=p;
return head;
}
4.尾插法创建单链表
// 尾插法
Linklist *tail_insert(Linklist *head,int value){ //
Linklist *p,*t;
t=head;
p=(Linklist *)malloc(sizeof(Linklist));
p->data=value;
while(t->next!=NULL){
t=t->next;
}
t->next=p;
p->next=NULL;
return head;
}
6.反转链表
/*翻转链表
1.把链表头节点和第一个节点拆下来,
p=head->next;
t=p->next;
p->next=NULL;
2.然后用头插法把原链表的节点插入到新的头结点(拆下来的头结点)
*/
Linklist *reverse(Linklist *head){
Linklist *t,*p,*q;
p=head->next;
t=p->next;//p->断开前部的最后一个节点
p->next=NULL;//把头结点和第一个节点拆下来,并把第一个结点指针置空;
while(t!=NULL){//循环头插 t->断开的后部第一个节点
q=t->next;//p保存t的后继节点,因为t要断开
t->next=head->next;//把t头插到新链表
head->next=t;//
t=q;//让t继续指向后部第一个节点
}
return head;
}
##7.删除节点
//删除节点
Linklist *delete_data(Linklist *head,int value){
Linklist *p,*t,*e;//e保存删除节点
p=head;
if(head->next==NULL){
cout<<"linklist is empty!";
}
while(p->next!=NULL){
if(p->next->data==value){
e=p->next;//保存删除节点
t=p->next->next;
p->next=t;
free(e);
p=t;
}
else{
p=p->next;
}
}
return head;
}
9.输出链表元素
//输出链表
Linklist *display(Linklist *head){
Linklist *p;
p=head->next;
if(p==NULL){
printf("linklist is empty!");
return 0;
}
while(p!=NULL){
cout<<p->data<<" ";
p=p->next;
}
cout<<"\n";
return head;
}
10 主函数测试
int main(){
Linklist* head;//定义一个头指针
int i,num;
head=creat();//返回创建了一个头节点的链表
printf("tail_insert :\n");
for(i=i;i<10;i++){
tail_insert(head,i);
}
display(head);
// printf("reverse :\n");
// reverse(head);
// display(head);
printf("delete :\n");
int value=3;
delete_data(head,value);
display(head);
// printf("head_insert :\n");
// for(i=1;i<10;i++){
// head_insert(head,i);
// }
// display(head);
return 0;
}