当前位置:   article > 正文

递归求链表最大值_递归求解单链表中的最大值

递归求解单链表中的最大值

递归求解单链表中的最大值-CSDN博客 

以上是参考

函数写不动了,结果发现原来是头结点没有初始化导致乱码。

递归的看find函数,

Max函数是别人的,

max函数是自己的遗迹代码。

find函数可以独立写起来。但是压缩成Max函数,代码用三目运算符压缩,变量内提可能想不出来。

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. typedef struct node {
  4. int e;
  5. node* next;
  6. } node;
  7. typedef struct list {
  8. node* head;
  9. node* rear;
  10. } list;
  11. list* init() {
  12. list* l = (list*)malloc(sizeof(list));
  13. l->head = (node*)malloc(sizeof(node));
  14. l->rear = l->head;
  15. l->head->next = NULL;
  16. return l;
  17. }
  18. int push(list* l, int e) {
  19. node* p = (node*)malloc(sizeof(node));
  20. p->e = e;
  21. p->next = l->rear->next;
  22. l->rear->next = p;
  23. l->rear = l->rear->next;
  24. return 1;
  25. }
  26. int pop(list* l, int *e) {
  27. node* p;
  28. p = l->head->next;
  29. *e = p->e;
  30. l->head->next = p->next;
  31. free(p);
  32. return 1;
  33. }
  34. //int max(node* head,int m) {
  35. // node* p=head->next;
  36. // if(p==NULL) {
  37. // return m;
  38. // } else {
  39. // return max(p->next,p->e);
  40. // }
  41. //}
  42. //
  43. //
  44. //int max(node* p) {
  45. // if(p==NULL) {
  46. // return m;
  47. // } else {
  48. // return max(p->next);
  49. // }
  50. //}
  51. //int max(node* p, node* p->next) {
  52. // if(p->next==NULL) {
  53. // return p->e;
  54. // } else {
  55. // printf("%d\n",p->e);
  56. // return max(p,max(p->next,p->next->next));
  57. // }
  58. //}
  59. //int find(node* p) {
  60. // if(p->next==NULL) {
  61. // return p->e;
  62. // } else {
  63. // printf("%d\n",p->e);
  64. // if(p->next->e>find(p)){
  65. // return find(p->next);
  66. // }else{
  67. // return p->next->e;
  68. // }
  69. // }
  70. //}
  71. int Max(node* p) {
  72. int max;
  73. if (p->next == NULL)
  74. return p->e;
  75. else {
  76. max = Max(p->next);
  77. return p->e >= max ? p->e : max;
  78. }
  79. }
  80. //int find(node* p){
  81. // if(p->next==NULL){
  82. // return p->e;
  83. // }else{
  84. // int m=find(p->next);
  85. // return m>p->e?m:p->e;
  86. // }
  87. //}
  88. int find(node* p, int n) {
  89. if (p == NULL) {
  90. return n;
  91. }
  92. // if (p->next == NULL) {
  93. // if (p->e > n) {
  94. // return p->e;
  95. // } else {
  96. // return n;
  97. // }
  98. // }
  99. else {
  100. // printf("%d\n",n);
  101. if (p->e >= n) {
  102. printf("%d\n", n);
  103. // printf("%d\n",p->e);
  104. return find(p->next, p->e);
  105. } else {
  106. // printf("%d\n",n);
  107. return find(p->next, n);
  108. }
  109. // 或者是下面这样
  110. return p->e>n?find(p->next,p->e):find(p->next,n);
  111. }
  112. }
  113. //int sum(node* p) {
  114. // if(p->next==NULL) {
  115. // return p->e;
  116. // } else {
  117. // printf("%d\n",p->e);
  118. // return p->e+sum(p->next);
  119. // }
  120. //}
  121. //int sum2(node* p) {
  122. // if(p->next=NULL) {
  123. // return p->e;
  124. // } else {
  125. // printf("%d\n",p->e);
  126. // return p->e*sum2(p->next);
  127. // }
  128. //}
  129. //function fn(n) {
  130. // if (n == 1) {
  131. // return 1;
  132. // }
  133. // return n * fn(n-1)
  134. //}
  135. void show(list* l) {
  136. node* p = l->head->next;
  137. while (p) {
  138. printf("%d\n", p->e);
  139. p = p->next;
  140. }
  141. }
  142. int main() {
  143. int i = 0;
  144. list* l = init();
  145. int p = -1;
  146. for (i = 0; i < 26; i++) {
  147. p = p * -1;
  148. push(l, p * i);
  149. }
  150. // show(l);
  151. printf("\n");
  152. int c = -1;
  153. // c = find(l->head, 15);
  154. // 带头结点导致空数据
  155. c = find(l->head->next, 15);
  156. // c=Max(l->head->next);
  157. printf("%d\n", c);
  158. // int d=sum(l->head->next);
  159. // printf("%d\n",d);
  160. return 0;
  161. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/852750
推荐阅读
相关标签
  

闽ICP备14008679号