Time:2019/4/7
Title: Linked List Cycle
Difficulty: Easyjavascript
Given a linked list, determine if it has a cycle in it.java
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.node
Example 1:git
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:github
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:this
Can you solve it using O(1) (i.e. constant) memory?spa
兩種解題思路:1)哈希表法:遍歷鏈表,沒遍歷一個節點就要在哈希表中判斷是否存在該結點,若是存在,則爲環;不然,將該結點插入到哈希表中繼續遍歷。指針
2)用兩個快慢指針,快指針走兩步,慢指針走一步,若是快指針與慢指針重合了,則檢測的當前鏈表爲環;若是當前指針或下一指針爲 null ,則鏈表不爲環。code
/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } */ /** * @param {ListNode} head * @return {boolean} */ var hasCycle = function(head) { let fast = head; let map = new Map(); while(fast !== null){ if(map.has(fast)){ return true; }else{ map.set(fast); fast = fast.next; } } return false; };
var hasCycle = function(head) { if(head == null || head.next == null){ return false; } let fast = head.next; let slow = head; while(slow != fast){ if(fast == null || fast.next == null){ return false; } slow = slow.next; fast = fast.next.next; } return true; };
這部分代碼是我本身寫的,和上邊的快慢指針思路相同,運行結果相同,可是當運行在 leetcode 時,就會提示超出時間限制,仔細對比代碼,咱們能夠發現,在邏輯順序上仍是存在差異的,之因此超出時間限制,是由於代碼的運行耗時長。
//超出時間限制 var hasCycle = function(head) { if(head == null || head.next == null){ return false; } let fast = head.next; let slow = head; while(fast !== null && fast.next !== null){ if(slow === fast) return true; slow = head.next; fast = fast.next.next; } return false; };
歡迎一塊兒加入到 LeetCode 開源 Github 倉庫,能夠向 me 提交您其餘語言的代碼。在倉庫上堅持和小夥伴們一塊兒打卡,共同完善咱們的開源小倉庫!
Github:https://github.com/luxiangqia...