编写一个函数,反序排列一个单链表的所有节点
#include<stdio.h>#include<stdlib.h>typedef struct Data{int num;struct Data *next;} Data;Data * creat(Data *head){int n = 0;Data *p1, *p2;p1 = p2 = (Data *)malloc(sizeof(Data));if(p1 == NULL){printf("鐢宠澶辫触锛?);return 0;}printf("杈撳叆num\n");scanf("%d", &(p1->num));while(p1->num != 0){n++;if(n == 1){head->next = p1;}else{p2->next = p1;p2 = p1;}p1 = (Data *)malloc(sizeof(Data));if(p1 == NULL){printf("鐢宠澶辫触锛?);exit(1);}printf("杈撳叆num\n");scanf("%d", &(p1->num));}p2->next = NULL;return head;}Data * fanlist(Data *head){Data *p1, *p2, *p3, *p4;p4 = head;p1 = head->next;p2 = p1->next;p3 = p2->next;for( ; p3 != NULL; ){if(p3->next == NULL){p3->next = NULL;}p2->next = p1;p1 = p2;p2 = p3;p3 = p3->next;}p2->next = p1;p1 = p2;p4->next->next = NULL;p4->next = p1;return (p4);}void print(Data *d){Data *p;p = d->next;for(;p != NULL;p = p->next){printf("%d ", p->num);}printf("\n");}int main(){Data data, *head;Data *h;head = creat(&data);h = fanlist(head);print(h);return 0;}