zoukankan      html  css  js  c++  java
  • [LeetCode] Linked List Cycle II

    Again, a classic interview question of linked list. Similar to Linked List Cycle, we maintain two pointers fast and slow: fast move two steps at one time while slow moves one step at a time. Once they become NULL, return NULL (no cycle). Otherwise, they will equal at some time. At this time, move any one of them back to head and then move both of them one step at a time. Then they will meet at the same node again. At this time, that node is where the cycle begins. Return it and we are done.

    The code is as follows.

     1     ListNode* detectCycle(ListNode* head) {
     2         ListNode* slow = head;
     3         ListNode* fast = head;
     4         while (fast && fast -> next) {
     5             slow = slow -> next;
     6             fast = fast -> next -> next;
     7             if (slow == fast) {
     8                 slow = head;
     9                 while (slow != fast) {
    10                     slow = slow -> next;
    11                     fast = fast -> next;
    12                 }
    13                 return slow;
    14             }
    15         }
    16         return NULL;
    17     }
  • 相关阅读:
    F. 数学上来先打表
    LibreOJ β Round #2
    noip飞扬的小鸟
    jxoi2017
    分块算法
    Chino的数列
    cf 613E
    cf 126D
    cf 542E
    cf 512D
  • 原文地址:https://www.cnblogs.com/jcliBlogger/p/4562139.html
Copyright © 2011-2022 走看看