zoukankan      html  css  js  c++  java
  • leetcode链表--6、linked-list-cycle-ii(有环单链表环的入口结点)

    题目描述
     
    Given a linked list, return the node where the cycle begins. If there is no cycle, returnnull.
    Follow up:
    Can you solve it without using extra space?
     
    解题思路:
    1、确定环中结点的数目(快慢指针确定环中结点,然后遍历到下一次到该节点确定数目n)
    2、一个指针先走n步,一个指针指向头结点
    3、然后两个指针一起走
    4、相遇点为入口点
     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     //1、确定环中结点数目n
    12     //2、两个指针  1个先走n步,然后两个一起走
    13     //3、相遇点即为入口点
    14     ListNode *detectCycle(ListNode *head) {
    15         if(head == NULL)
    16             return NULL;
    17         ListNode *node = MettingNode(head);
    18         if(node == NULL)//无环
    19         {
    20             return NULL;
    21         }
    22         int nodeNum = 1;
    23         ListNode *pNode = node;
    24         while(pNode->next != node)
    25         {
    26             pNode =pNode->next;
    27             nodeNum++;
    28         }
    29         pNode = head;//pNode指向头结点
    30         for(int i=0;i<nodeNum;i++)
    31         {
    32             pNode = pNode->next;
    33         }
    34         ListNode *pNode2  = head;
    35         while(pNode2 != pNode)//两结点不相遇
    36         {
    37             pNode = pNode->next;
    38             pNode2 = pNode2->next;
    39         }
    40         return pNode;
    41     }
    42     //快慢指针找环中相遇结点
    43     //找到相遇节点就可确定环中结点数目
    44     ListNode *MettingNode(ListNode *head)
    45     {
    46         if(head == NULL)
    47             return NULL;
    48         ListNode *slow = head;
    49         ListNode *fast = head;
    50         while(fast != NULL && fast->next != NULL)
    51         {
    52             slow = slow->next;
    53             fast = fast->next->next;
    54             if(slow == fast)
    55                 return slow;
    56         }
    57         return NULL;
    58     }
    59 };
  • 相关阅读:
    jsp <img src="“> src 相对路径的问题
    记一次Intellij-IDEA配置JDK1.8,支持Lambda新特性
    centOS6.5 查看 启动 关闭防火墙
    java设计模式之--工厂方法模式
    BlockingQueue之---ArrayBlockingQueue
    两个线程,一个为123456,一个为ABCDEF、交替打印出1A2B3C...
    JUC之---超好用的阻塞锁
    JUC之---读写锁
    java设计模式之--代理模式
    java设计模式之--线程安全的单例模式
  • 原文地址:https://www.cnblogs.com/qqky/p/6830647.html
Copyright © 2011-2022 走看看