zoukankan      html  css  js  c++  java
  • [LeetCode OJ] Linked List Cycle II—Given a linked list, return the node where the cycle begins. If there is no cycle, return null.

     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     ListNode *detectCycle(ListNode *head) {
    12         ListNode *p1, *p2; //p1和p2从链表的第一个节点出发,p1每次移动一个节点,p2每次移动两个节点,若两个指针重逢,则说明有环存在,否则若p2遇到NULL指针,说明无环存在
    13         p1 = p2 = head;
    14 
    15         if(p2==NULL || p2->next==NULL)
    16            return NULL;
    17         p1 = p1->next;
    18         p2 = p2->next->next;
    19         
    20         while(p1!=p2)
    21         {
    22             if(p2==NULL || p2->next==NULL)
    23                 return NULL;
    24             p1 = p1->next;
    25             p2 = p2->next->next;
    26         
    27         }
    28         //此时p1==p2,说明有环存在。利用定理:p1和p2相遇处距离链表的第一个节点的长度是环长度的整数倍,来求环起始点。让一个指针从head处开始出发,另一个指针从相遇处出发,这两个指针必然在环起始节点处相遇
    29         ListNode * CircleBegin_Node;
    30         p1 = head;
    31         while(p1!=p2)
    32         {
    33             p1 = p1->next;
    34             p2 = p2->next;
    35         }
    36         CircleBegin_Node = p1;
    37         return CircleBegin_Node;
    38     }
    39 };
  • 相关阅读:
    document.all用法
    $.ajax同步/异步(async:false/true)
    link 和@import 的区别
    如何对网页的加载进行性能优化
    border-style有哪些值?
    CSS设置DIV居中
    jquery选择器
    jQuery库中获取jQuery对象的方式
    Observer,观察者模式,C++描述
    Iterator,迭代器模式,C++描述
  • 原文地址:https://www.cnblogs.com/Marrybe/p/3777939.html
Copyright © 2011-2022 走看看