封装一个逆序函数
struct node * ReverseList(struct node *head) //链表逆序
{
if(head==NULL||head->next==NULL)
return head;
struct node *p=NULL;
struct node *p1=NULL;
struct node *p2=NULL;
p=head;
p1=p->next;
p2=p1->next;
p->next=NULL;
while(p2!=NULL)
{
p1->next=p;
p=p1;
p1=p2;
p2=p2->next;
}
p1->next=p;
return p1;
}
创建一个五个节点的链表
#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
struct node *next;
};
struct node *init(void)
{
struct node *p=NULL;
p=(struct node *)malloc(sizeof(struct node));
p->data=0;
p->next=NULL;
return p;
}
int insert_node(struct node *head,struct node *new)
{
if(head==NULL||new==NULL)
return -1;
new->next=head->next;
head->next=new;
return 0;
}
int find(struct node *head)
{
if(head==NULL)
return -1;
struct node *p=NULL;
p=head;
while(p!=NULL)
{
printf("%d\t",p->data);
p=p->next;
}
return 0;
}
主函数调用
int main(void)
{
int i;
struct node *head,*new;
head=init();
printf("请输入五个数字存进链表,输入一个数字回车一次\n");
scanf("%d",&head->data);
getchar();
for(i=1;i<5;i++)
{
new=init();
scanf("%d",&new->data);
getchar();
insert_node(head,new);
}
find(head);
printf("\n");
head=ReverseList(head);
find(head);
return 0;
}
概念图