单链表----递归建立,递归反转,递归打印

/*

*    auther: Try86

*    time:2012/9/25 13:14

*    dec:单链表:递归建立,递归反转,递归打印

*/



#include <stdio.h>

#include <stdlib.h>

#include <assert.h>



typedef struct list                 //单链表节点结构

{

   int data;

   struct list *p_next;

}List;



int main(void)

{

   int num = 0;                    //统计单链表的节点数

   List *head = NULL;              //链表头指针

   List *p_cur = NULL;

   void build_list(List **head, List *p_cur, int *pnum);   
void list_reverse(List **head, List *p_cur, List *p_nt, int *pnum); void print(List *ptr); build_list(&head, p_cur, &num); assert(NULL != head); //判断是否为空表 list_reverse(&head, head, head->p_next, &num); print(head); return 0; } //递归建立单链表 void build_list(List **head, List *p_cur, int *pnum) { int num; List *ptr = NULL; if (scanf("%d", &num) && num > 0) { ++(*pnum); if ((ptr = (List *)malloc(sizeof(List))) != NULL) { ptr->data = num; ptr->p_next = NULL; if (NULL == *head) { *head = ptr; p_cur = ptr; p_cur->p_next = ptr->p_next; } else { p_cur->p_next = ptr; p_cur = p_cur->p_next; } build_list(head, p_cur, pnum); } } } //递归反转单链表 void list_reverse(List **head, List *p_cur, List *p_nt, int *pnum) { if (NULL == p_nt) { *head = p_cur; --(*pnum); return ; } list_reverse(head, p_cur->p_next, p_nt->p_next, pnum); p_nt->p_next = p_cur; --(*pnum); if (0 == *pnum) { p_cur->p_next = NULL; } } //递归打印单链表 void print(List *ptr) { if (NULL != ptr) { printf("%d\t", ptr->data); } else { return ; } print(ptr->p_next); }

 

你可能感兴趣的:(单链表)