剑指offer之判断链表是否包含环

举报
chenyu 发表于 2021/07/27 00:36:49 2021/07/27
【摘要】 1 问题 判断链表是否包含环       2 思路 2个指针,一个指针走一步,一个指针走2步,如果相遇则有,反之无。         3 代码实现 #include <stdio.h>#include <stdlib.h> #define true 1#def...

1 问题

判断链表是否包含环

 

 

 

2 思路

2个指针,一个指针走一步,一个指针走2步,如果相遇则有,反之无。

 

 

 

 

3 代码实现


  
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define true 1
  4. #define false 0;
  5. typedef struct node
  6. {
  7. int value;
  8. struct node *next;
  9. }Node;
  10. /*
  11. *判断链表是否有环
  12. */
  13. int isCircleList(Node *head)
  14. {
  15. if (head == NULL)
  16. {
  17. return false;
  18. }
  19. Node *first = NULL;
  20. Node *second = NULL;
  21. first = head;
  22. second = head;
  23. while (second != NULL && (second->next) != NULL && (second->next->next != NULL))
  24. {
  25. first = first->next;
  26. second = second->next->next;
  27. if (first == second)
  28. {
  29. return true;
  30. }
  31. }
  32. return false;
  33. }
  34. int main()
  35. {
  36. Node *head = NULL;
  37. Node *node1 = NULL;
  38. Node *node2 = NULL;
  39. Node *node3 = NULL;
  40. Node *node4 = NULL;
  41. Node *node5 = NULL;
  42. Node *node6 = NULL;
  43. Node *node7 = NULL;
  44. head = (Node *)malloc(sizeof(Node));
  45. node1 = (Node *)malloc(sizeof(Node));
  46. node2 = (Node *)malloc(sizeof(Node));
  47. node3 = (Node *)malloc(sizeof(Node));
  48. node4 = (Node *)malloc(sizeof(Node));
  49. node5 = (Node *)malloc(sizeof(Node));
  50. node6 = (Node *)malloc(sizeof(Node));
  51. node7 = (Node *)malloc(sizeof(Node));
  52. if (head == NULL || node1 == NULL || node2 == NULL || node3 == NULL
  53. || node4 == NULL || node5 == NULL || node6 == NULL || node7 == NULL)
  54. {
  55. printf("malloc fail\n");
  56. return false;
  57. }
  58. // node7<-node6 <-node5
  59. // | |
  60. //head->node1->node2->node3->node4
  61. head->value = 0;
  62. head->next = node1;
  63. node1->value = 1;
  64. node1->next = node2;
  65. node2->value = 2;
  66. node2->next = node3;
  67. node3->value = 3;
  68. node3->next = node4;
  69. node4->value = 4;
  70. node4->next = node5;
  71. node5->value = 5;
  72. node5->next = node6;
  73. node6->value = 6;
  74. node6->next = node7;
  75. node7->value = 7;
  76. node7->next = node2;
  77. int result = isCircleList(head);
  78. if (result)
  79. {
  80. printf("list have circle\n");
  81. }
  82. else
  83. {
  84. printf("list do not have circle\n");
  85. }
  86. return true;
  87. }

 

 

 

4 运行结果

list have circle
 

 

文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。

原文链接:chenyu.blog.csdn.net/article/details/87748768

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。