zoukankan      html  css  js  c++  java
  • Linked List Cycle

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

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

    分析:用map记录是否出现过。

    用时:60ms

     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     bool hasCycle(ListNode *head) {
    12         if(!head || !head->next) return false;
    13         
    14         map<ListNode*, bool> m;
    15         while(head){
    16             if(m.find(head) == m.end()) m[head] = true;
    17             else return true;
    18             head = head->next;
    19         }
    20         return false;
    21     }
    22 };

    看到比较好的方法:设置两个指针,一个快(每次走两步),一个慢(每次走一步)。如果快慢指针相遇,那么表示有环,否则无环。

    用时16ms。远优于使用map的方式。

     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     bool hasCycle(ListNode *head) {
    12         if(!head || !head->next) return false;
    13         
    14         ListNode *fast = head, *slow = head;
    15         while(fast && fast->next){
    16             fast = fast->next->next;
    17             slow = slow->next;
    18             if(fast == slow) return true;
    19         }
    20         return false;
    21     }
    22 };
  • 相关阅读:
    Canvas 绘画
    h5内容初探
    border&background1
    css3选择器补充
    bootstrap
    css3文本和颜色
    css3边框与背景
    css3选择器
    jQuery之dom操作(取赋值方法)
    push.default
  • 原文地址:https://www.cnblogs.com/amazingzoe/p/4518278.html
Copyright © 2011-2022 走看看