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

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

    To represent a cycle in the given linked list, we use an integer pos which represents the position (0-indexed) in the linked list where tail connects to. If pos is -1, then there is no cycle in the linked list.

    Example 1:

    Input: head = [3,2,0,-4], pos = 1
    Output: true
    Explanation: There is a cycle in the linked list, where tail connects to the second node.
    

    Example 2:

    Input: head = [1,2], pos = 0
    Output: true
    Explanation: There is a cycle in the linked list, where tail connects to the first node.
    

    Example 3:

    Input: head = [1], pos = -1
    Output: false
    Explanation: There is no cycle in the linked list.
    

    Follow up:

    Can you solve it using O(1) (i.e. constant) memory?

    环形链表。

    题意很简单,思路是用快慢指针,慢指针每走一步,快指针走两步。如果快慢指针在某个地方相遇了,说明有环;否则快指针就会遍历到链表尾部从而会退出循环。

    时间O(n)

    空间O(1)

    JavaScript实现

     1 /**
     2  * @param {ListNode} head
     3  * @return {boolean}
     4  */
     5 var hasCycle = function(head) {
     6     // corner case
     7     if (head === null || head.next === null) {
     8         return false;
     9     }
    10 
    11     // normal case
    12     let slow = head;
    13     let fast = head;
    14     while (fast !== null && fast.next !== null) {
    15         slow = slow.next;
    16         fast = fast.next.next;
    17         if (slow === fast) {
    18             return true;
    19         }
    20     }
    21     return false;
    22 };

    Java实现

     1 public class Solution {
     2     public boolean hasCycle(ListNode head) {
     3         // corner case
     4         if (head == null || head.next == null) {
     5             return false;
     6         }
     7 
     8         // normal case
     9         ListNode slow = head;
    10         ListNode fast = head;
    11         while (fast != null && fast.next != null) {
    12             slow = slow.next;
    13             fast = fast.next.next;
    14             if (slow == fast) {
    15                 return true;
    16             }
    17         }
    18         return false;
    19     }
    20 }

    LeetCode 题目总结

  • 相关阅读:
    [转载]游戏外挂原理
    python cookbook
    RF user guide
    测试理论-selenium的工作原理
    测试理论- the conten of test plan
    测试理论--branch testing and boundary testing
    测试理论--向高级出发
    fiddler安装及配置
    python 面试题: 列表表达式
    [redis]如何将redis设置成diango的cache backend
  • 原文地址:https://www.cnblogs.com/cnoodle/p/11828784.html
Copyright © 2011-2022 走看看