首页 > 代码库 > 建立链表并逆序打印该链表

建立链表并逆序打印该链表

下面程序有几个地方注意一下,见注释.

 1 #include <stdio.h> 2 #include <stdlib.h> 3  4 /*以后写结构体,都使用该格式.即typedef标注.上下ListNode要相同.*/ 5 typedef struct ListNode 6 { 7     int key; 8     struct ListNode *next; 9 } ListNode;10 11 static ListNode *create_list();12 static void print_list(ListNode *);13 static void reverse_print(ListNode *);14 15 int main(int argc, char *argv[])16 {17     ListNode *head = NULL;
    /*不能直接使用create_list(head),想想为什么?
    **函数调用时,参数的传递相当于赋值.不能将空指针赋值给其他指针.*/
18 head = create_list();19 print_list(head);20 21 reverse_print(head);22 printf("\n");23 return 0;24 }25 26 static ListNode *create_list()27 {28 int c;29 ListNode *p;30 31 head = (ListNode *)malloc(sizeof(ListNode));32 head->next = NULL;33 p = head;34 35 scanf("%d", &c);36 while (c != -1)37 {38 p->next = (ListNode *)malloc(sizeof(ListNode));39 p->next->key = c;40 p->next->next = NULL;41 p = p->next;42 scanf("%d", &c);43 }44 return head;45 }46 47 48 static void print_list(ListNode *head)49 {50 ListNode *p;51 p = head->next;52 53 while (p != NULL)54 {55 printf("%d ", p->key);56 p = p->next;57 }58 printf("\n");59 }60 /*该递归调用好好品品.*/61 static void reverse_print(ListNode *head)62 {63 ListNode *p;64 65 p = head->next;66 if (p == NULL)67 {68 return;69 }70 else71 {72 reverse_print(p);73 }74 75 printf("%d ", p->key);76 }

 

建立链表并逆序打印该链表