链表的简易实现

创建一个带头节点的链表,并把链表用递归法实现逆序以及链表遍历


[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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值