当前位置:   article > 正文

对于一个不带头结点的非空单链表L,设计一个递归算法返回最大结点的地址(假设这样的结点唯一)_设有一个不带头结点的整数单链表p(所有结点值均位子~100)设计一个递归算法max

设有一个不带头结点的整数单链表p(所有结点值均位子~100)设计一个递归算法max

算法设计与分析题目

对于地址这个定义没太清楚,这是指它所在的序号还是本身的地址呢?

所以输出了两种结果

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. typedef struct Node {
  4. int data;
  5. int num;
  6. struct Node *next;
  7. }LinkNode;
  8. LinkNode *Maxnode(LinkNode *L)
  9. {
  10. if(L->next== NULL)
  11. return L;
  12. else {
  13. LinkNode *maxp;
  14. maxp = Maxnode(L->next);
  15. if(L->data > maxp->data)
  16. return L;
  17. else
  18. return maxp;
  19. }
  20. }
  21. LinkNode *CreateList(int a[],int n) {
  22. if(n < 0)
  23. return NULL;
  24. LinkNode *head = (LinkNode *)malloc(sizeof(LinkNode));
  25. LinkNode *p = (LinkNode *)malloc(sizeof(LinkNode));
  26. p = head;
  27. head->data = a[0];
  28. head->num = 0;
  29. int i = 0;
  30. for(i = 1; i < n; i++) {
  31. LinkNode *node = (LinkNode *)malloc(sizeof(LinkNode));
  32. node->data = a[i];
  33. node->num = i;
  34. p->next = node;
  35. p = node;
  36. }
  37. p->next = NULL;
  38. return head;
  39. }
  40. void DispList(LinkNode *ln)
  41. {
  42. printf(" ");
  43. if(ln != NULL){
  44. printf("%d",ln->data);
  45. DispList(ln->next);
  46. }
  47. }
  48. void Release(LinkNode *ln)
  49. {
  50. if(ln->next == NULL)
  51. return ;
  52. else {
  53. Release(ln->next);
  54. free(ln);
  55. }
  56. }
  57. int main()
  58. {
  59. int a[] = {56,42,2,76,8,22,45,19};
  60. LinkNode *L,*p;
  61. int n = sizeof(a) / sizeof(a[0]);
  62. L = CreateList(a,n);
  63. printf("非空链表为:");
  64. DispList(L);
  65. p = Maxnode(L);
  66. printf("\n最大值为:%d", p->data);
  67. printf("\n最大值的地址为:%d",&p);
  68. printf("\n最大值对应的序号为:%d",p->num);
  69. Release(L);
  70. return 0;
  71. }

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号