zoukankan      html  css  js  c++  java
  • 【手撕代码1】-判断单链表是否有环+求环的长度+求入环点

    核心思想:快慢指针

     1 #include<cstdio>
     2 #include<iostream>
     3 using namespace std;
     4 
     5 struct listnode {
     6     int val;
     7     listnode* next;
     8 };
     9 listnode* meet;
    10 listnode* head;
    11 //判断是否有环
    12 bool panduan(listnode * head)
    13 {
    14     if (head == NULL)return false;
    15     listnode* fast=head;
    16     listnode* slow=head;
    17     //因为这里fast有两个next,所以要保证fast->next也不为空
    18     while (fast != NULL&&fast->next!=NULL)
    19     {
    20         if (fast == slow)
    21         {
    22             meet = fast;
    23             return true;
    24         }
    25         fast = fast->next->next;
    26         slow = slow->next;
    27     }
    28     return true;
    29 }
    30 //求环长度
    31 int len()
    32 {
    33     listnode* p = meet;
    34     int sum = 1;
    35     p = p->next;
    36     while (p != meet)
    37     {
    38         sum++;
    39         p = p->next;
    40     }
    41     return sum;
    42 }
    43 //求入环点 L=kc-n
    44 //只需要找到相遇节点,再让一个指针从头开始走即可
    45 listnode* findnode()
    46 {
    47     listnode* a=meet;
    48     listnode* b = head;;
    49     while (a && b)
    50     {
    51         if (a == b)return a;
    52         a = a->next;
    53         b = b->next;
    54     }
    55     return NULL;
    56 }
    57 
    58 int main()
    59 {
    60     
    61     /*数据输入*/
    62     panduan(head);
    63     len();
    64     findnode();
    65     return 0;
    66 }

    具体详见 https://blog.csdn.net/etalien_/article/details/90272899

  • 相关阅读:
    页面存在多个setInterval
    ios 常见兼容问题
    微信开发常用代码
    jq右侧划出
    常用 css rem 根字体
    weinre使用教程
    CSS属性大全
    微信H5页面前端开发,大多数人都会遇到的几个兼容性坑
    后台管理系统页面欣赏
    微信公众号开发文档
  • 原文地址:https://www.cnblogs.com/Annetree/p/13600314.html
Copyright © 2011-2022 走看看