【C语言】链表的正向输出及链表的逆向输出
#include <stdio.h> #include <stdlib.h> #define N 20 typedef struct num { int num; struct num *next; } *Link, Linknode; Link Create_Link(int n); Link Reverse_Link(Linknode *head); //链表的逆置输出 void Print_Link(Linknode *head); void Print_Stack(Linknode *head); int main(void) { Link head, reverse; head = Create_Link(N); printf(" Before: "); Print_Link(head); reverse = Reverse_Link(head); // printf(" After: "); // Print_Stack(reverse); return 0; } Link Create_Link(int n) { int i; Link head; Linknode *p1, *p2; head = (Link)malloc(sizeof(Linknode)); head->next = NULL; p2 = head; while ( i < n ) { p1 = (Linknode *)malloc(sizeof(Linknode)); p1->num = i; p1->next = NULL; p2->next = p1; p2 = p1; i++; } return head; } void Print_Link(Linknode *head) { Linknode *p; p = head->next; while ( p != NULL ) { printf("%d ", p->num); p = p->next; } } Link Reverse_Link(Linknode *head) { Link stack, p1; Linknode *p2; p1 = head; stack = (Link)malloc(sizeof(Linknode)); stack->next = NULL; while ( p1->next != NULL ) { p2 = (Linknode *)malloc(sizeof(Linknode)); p2->num = p1->next->num; p2->next = stack->next; stack->next = p2; p1->next = p1->next->next; } printf(" After: "); while ( stack->next != NULL ) { Linknode *k; k = stack->next; printf("%d ", k->num); stack->next = stack->next->next; free(k); } printf(" "); } //void Print_Stack(Linknode *head) //{ // int num; // while ( head->next != NULL ) // { // Linknode *s; // s = head->next; // num = s->num; // printf("%d ", num); // head->next = head->next->next; // } //}
下一篇:
已知后序中序,求先序