剑指offer之判断链表是否包含环
        【摘要】  1 问题 
判断链表是否包含环 
  
  
  
2 思路 
2个指针,一个指针走一步,一个指针走2步,如果相遇则有,反之无。 
  
  
  
  
3 代码实现 
#include <stdio.h>#include <stdlib.h> #define true 1#def...
    
    
    
    1 问题
判断链表是否包含环
2 思路
2个指针,一个指针走一步,一个指针走2步,如果相遇则有,反之无。
3 代码实现
  
   - 
    
     
    
    
     
      #include <stdio.h>
     
    
- 
    
     
    
    
     
      #include <stdlib.h>
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      #define true 1
     
    
- 
    
     
    
    
     
      #define false 0;
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      typedef struct node
     
    
- 
    
     
    
    
     
      {
     
    
- 
    
     
    
    
      int value;
     
    
- 
    
     
    
    
      struct node *next;
     
    
- 
    
     
    
    
     
      }Node;
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      /*
     
    
- 
    
     
    
    
     
       *判断链表是否有环
     
    
- 
    
     
    
    
     
       */
     
    
- 
    
     
    
    
     
      int isCircleList(Node *head)
     
    
- 
    
     
    
    
     
      {
     
    
- 
    
     
    
    
      if (head == NULL)
     
    
- 
    
     
    
    
     
       {
     
    
- 
    
     
    
    
      return false;
     
    
- 
    
     
    
    
     
       }
     
    
- 
    
     
    
    
     
       Node *first = NULL;
     
    
- 
    
     
    
    
     
       Node *second = NULL;
     
    
- 
    
     
    
    
     
       first = head;
     
    
- 
    
     
    
    
     
       second = head;
     
    
- 
    
     
    
    
      while (second != NULL && (second->next) != NULL && (second->next->next != NULL))
     
    
- 
    
     
    
    
     
       {
     
    
- 
    
     
    
    
     
       first = first->next;
     
    
- 
    
     
    
    
     
       second = second->next->next;
     
    
- 
    
     
    
    
      if (first == second)
     
    
- 
    
     
    
    
     
       {
     
    
- 
    
     
    
    
      return true;
     
    
- 
    
     
    
    
     
       }
     
    
- 
    
     
    
    
     
       }
     
    
- 
    
     
    
    
      return false;
     
    
- 
    
     
    
    
     
      }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
     
      int main()
     
    
- 
    
     
    
    
     
      {
     
    
- 
    
     
    
    
     
       Node *head = NULL;
     
    
- 
    
     
    
    
     
       Node *node1 = NULL;
     
    
- 
    
     
    
    
     
       Node *node2 = NULL;
     
    
- 
    
     
    
    
     
       Node *node3 = NULL;
     
    
- 
    
     
    
    
     
       Node *node4 = NULL;
     
    
- 
    
     
    
    
     
       Node *node5 = NULL;
     
    
- 
    
     
    
    
     
       Node *node6 = NULL;
     
    
- 
    
     
    
    
     
       Node *node7 = NULL;
     
    
- 
    
     
    
    
     
       head = (Node *)malloc(sizeof(Node));
     
    
- 
    
     
    
    
     
       node1 = (Node *)malloc(sizeof(Node));
     
    
- 
    
     
    
    
     
       node2 = (Node *)malloc(sizeof(Node));
     
    
- 
    
     
    
    
     
       node3 = (Node *)malloc(sizeof(Node));
     
    
- 
    
     
    
    
     
       node4 = (Node *)malloc(sizeof(Node));
     
    
- 
    
     
    
    
     
       node5 = (Node *)malloc(sizeof(Node));
     
    
- 
    
     
    
    
     
       node6 = (Node *)malloc(sizeof(Node));
     
    
- 
    
     
    
    
     
       node7 = (Node *)malloc(sizeof(Node));
     
    
- 
    
     
    
    
      if (head == NULL || node1 == NULL || node2 == NULL || node3 == NULL
     
    
- 
    
     
    
    
     
       || node4 == NULL || node5 == NULL || node6 == NULL || node7 == NULL)
     
    
- 
    
     
    
    
     
       {
     
    
- 
    
     
    
    
      printf("malloc fail\n");
     
    
- 
    
     
    
    
      return false;
     
    
- 
    
     
    
    
     
       }
     
    
- 
    
     
    
    
      // node7<-node6 <-node5
     
    
- 
    
     
    
    
      // | |
     
    
- 
    
     
    
    
      //head->node1->node2->node3->node4
     
    
- 
    
     
    
    
     
       head->value = 0;
     
    
- 
    
     
    
    
     
       head->next = node1;
     
    
- 
    
     
    
    
     
       node1->value = 1;
     
    
- 
    
     
    
    
     
       node1->next = node2;
     
    
- 
    
     
    
    
     
       node2->value = 2;
     
    
- 
    
     
    
    
     
       node2->next = node3;
     
    
- 
    
     
    
    
     
       node3->value = 3;
     
    
- 
    
     
    
    
     
       node3->next = node4;
     
    
- 
    
     
    
    
     
       node4->value = 4;
     
    
- 
    
     
    
    
     
       node4->next = node5;
     
    
- 
    
     
    
    
     
       node5->value = 5;
     
    
- 
    
     
    
    
     
       node5->next = node6;
     
    
- 
    
     
    
    
     
       node6->value = 6;
     
    
- 
    
     
    
    
     
       node6->next = node7;
     
    
- 
    
     
    
    
     
       node7->value = 7;
     
    
- 
    
     
    
    
     
       node7->next = node2;
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      int result = isCircleList(head);
     
    
- 
    
     
    
    
      if (result)
     
    
- 
    
     
    
    
     
       {
     
    
- 
    
     
    
    
      printf("list have circle\n");
     
    
- 
    
     
    
    
     
       }
     
    
- 
    
     
    
    
      else
     
    
- 
    
     
    
    
     
       {
     
    
- 
    
     
    
    
      printf("list do not have circle\n");
     
    
- 
    
     
    
    
     
       }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      return true;
     
    
- 
    
     
    
    
     
      }
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      
     
    
- 
    
     
    
    
      
     
    
 
4 运行结果
list have circle
 
文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。
原文链接:chenyu.blog.csdn.net/article/details/87748768
        【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
            cloudbbs@huaweicloud.com
        
        
        
        
        
        
        - 点赞
- 收藏
- 关注作者
 
             
           
评论(0)