编纂一个函数,反序排列一个单链表的所有节点
编写一个函数,反序排列一个单链表的所有节点
#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; }