zoukankan      html  css  js  c++  java
  • 【题解】【链表】【Leetcode】Linked List Cycle II

    Given a linked list, return the node where the cycle begins. If there is no cycle, return null.

    Follow up:
    Can you solve it without using extra space?

    思路

    这题是Linked List Cycle的进阶版

    Given a linked list, determine if it has a cycle in it.

     1 bool hasCycle(ListNode *head) {
     2     if(head == NULL) return false; //带环链表还要考虑只有单个元素的情况
     3     ListNode *faster = head, *slower = head;
     4     while(faster->next != NULL && faster->next->next != NULL && slower->next != NULL){//直接判断faster->next->next != NULL会抛错
     5         faster = faster->next->next;
     6         slower = slower->next;
     7         if(faster == slower) 
     8             return true;
     9     }
    10     return false;
    11 }

    faster和slower相遇之后必然在环上,让slower再走一圈计算环的长度len。另让两个指针p1,p2从head开始走,p1比p2先走len步,这样当p2走到环开始处时,正好p1与p2第一次相遇。

     1 ListNode *detectCycle(ListNode *head) {
     2     if(head == NULL) return NULL;
     3     //带环链表要考虑只有单个元素的情况
     4     ListNode *faster = head, *slower = head;
     5     while(faster->next != NULL && faster->next->next != NULL && slower->next != NULL){//直接判断faster->next->next != NULL会抛错
     6         faster = faster->next->next;
     7         slower = slower->next;
     8         if(faster == slower){
     9             ListNode *p1 = head;//另让两个指针p1,p2从head开始走
    10             ListNode *p2 = head;
    11             slower = slower->next;//让slower再走一圈计算环的长度len
    12             p1 = p1->next;//设len是环的长度,p1比p2先走len步
    13             if(faster == slower) return faster;//自环
    14             while(faster != slower){
    15                 slower = slower->next;
    16                 p1 = p1->next;
    17             }
    18             while(p1 != p2){//当p1与p2第一次相遇时,正好p2走到环开始处
    19                 p1 = p1->next;
    20                 p2 = p2->next;
    21             }
    22             return p2;
    23         }
    24     }
    25     return NULL;
    26 }
  • 相关阅读:
    CodeDOM浅析(上)
    这段代码居然运行正常
    CodeDOM浅析(下)
    动态生成与编译(七)根据CodeDOM生成源代码
    动态生成与编译(九)CodeDOM的局限
    动态生成与编译(八)动态编译
    新年送大礼
    祝所有的女性朋友们节日快乐!
    预测人民币在2006年最终的收盘价
    2007年春节,祝朋友们:身体健康,万事如意! 度过一个愉快春节!
  • 原文地址:https://www.cnblogs.com/wei-li/p/LinkedListCycleII.html
Copyright © 2011-2022 走看看