链表的逆序

来源:互联网 发布:淘宝数据分析表格 编辑:程序博客网 时间:2024/05/16 19:25

创建一个带头节点的链表并把链表的逆序(递归法),链表遍历


[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3.   
  4.   
  5. /* define structure of linklist */  
  6. typedef struct Node  
  7. {  
  8.     int data;  
  9.     struct Node *next;  
  10. }Link,LinkList;  
  11.   
  12.   
  13. /***********************************************************  
  14. Function    : create 
  15. Description : create a linklist 
  16. Parameter   : LinkList **L:linklist head, 
  17.               int n: length of linklist 
  18. Return      : void 
  19. Authot      : Puls   
  20. ************************************************************/  
  21. void create(LinkList **L, int n)  
  22. {  
  23.     LinkList *p;  
  24.     int i;  
  25.     *L = (LinkList*)malloc(sizeof(Link));  
  26.     (*L)->next = NULL;  
  27.   
  28.     for(i=0; i<n; i++)  
  29.     {  
  30.         p = (LinkList*)malloc(sizeof(Link));  
  31.         p->data = i;  
  32.         p->next = (*L)->next;  
  33.         (*L)->next = p;  
  34.     }  
  35. }  
  36.   
  37.   
  38. /***********************************************************  
  39. Function    : print 
  40. Description : print linklist 
  41. Parameter   : LinkList **L: linklist head 
  42. Return      : void 
  43. Authot      : Puls   
  44. ************************************************************/  
  45. void print(LinkList **L)  
  46. {  
  47.     LinkList *p = (*L)->next;  
  48.     while(p)  
  49.     {  
  50.         printf("%d->", p->data);  
  51.         p = p->next;  
  52.     }  
  53.   
  54. }  
  55.   
  56. /***********************************************************  
  57. Function    : reverseLink 
  58. Description : reverse linklist 
  59. Parameter   : LinkList **L: linklist head, 
  60. Return      : void 
  61. Authot      : Puls   
  62. ************************************************************/  
  63. LinkList* reverseLink(LinkList **L)  
  64. {  
  65.     LinkList *p = *L;  
  66.       
  67.     if(p==NULL)  
  68.     {  
  69.         return;   
  70.     }  
  71.       
  72.     if(p->next!=NULL)  
  73.     {  
  74.         reverseLink(&p->next);       /* 递归法逆序链表 */  
  75.     }  
  76.       
  77.       
  78. }  
  79.   
  80. /***********************************************************  
  81. Function    : main 
  82. Description : program access 
  83. Parameter   : void 
  84. Return      :  
  85. Authot      : Puls   
  86. ************************************************************/  
  87. int main()  
  88. {  
  89.     LinkList *L;  
  90.     create(&L, 10);  
  91.     print(&L);  
  92.     printf("\n");  
  93.     reverseLink(&L);  
  94.     printf("%d->", p->data);  
  95. }  
0 0
原创粉丝点击