封装一个逆序函数
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; }概念图