leetcode linked-list-cycle(i 、ii)(java实现)
2017-02-01 15:37
423 查看
原题:
Given a linked list, return the node where the cycle begins. If there is no cycle, returnnull.
Follow up:
Can you solve it without using extra space?
分析:给出一个线性列表,找出其中的环,返回这个环开始的节点。如果没有环,返回空节点。
设置快慢指针。慢指针每次走一步,快指针每次走两步,当快慢指针重合时,再令一个指针指向头结点,两个指针此时距离目标节点是相等的。然后两个指针都每次移动一个节点直至重合,即可得到目标节点。(这是已经被证明过的一个理论)
代码如下:
同理:linked-list-cyclei,判断是否有环的原理也相同。
代码如下:
Given a linked list, return the node where the cycle begins. If there is no cycle, returnnull.
Follow up:
Can you solve it without using extra space?
分析:给出一个线性列表,找出其中的环,返回这个环开始的节点。如果没有环,返回空节点。
设置快慢指针。慢指针每次走一步,快指针每次走两步,当快慢指针重合时,再令一个指针指向头结点,两个指针此时距离目标节点是相等的。然后两个指针都每次移动一个节点直至重合,即可得到目标节点。(这是已经被证明过的一个理论)
代码如下:
public class Solution { public ListNode detectCycle(ListNode head) { ListNode slow = head; ListNode fast = head; while(fast != null && fast.next != null){ slow = slow.next; fast = fast.next.next; if(slow == fast) break; } if(fast == null || fast.next == null) return null; slow = head; while(slow != fast){ slow = slow.next; fast = fast.next; } return fast; } }
同理:linked-list-cyclei,判断是否有环的原理也相同。
代码如下:
public class Solution { public boolean hasCycle(ListNode head) { ListNode slow = head; ListNode fast = head; while(fast!=null && fast.next!=null){ slow = slow.next; fast = fast.next.next; if(slow == fast){ break; } } if(fast==null || fast.next==null){ return false; } else{ return true; } } }
相关文章推荐
- 【LeetCode-面试算法经典-Java实现】【142-Linked List Cycle II(单链表中有环II)】
- 【LeetCode-面试算法经典-Java实现】【141-Linked List Cycle(单链表中有环)】
- leetcode:142. Linked List Cycle II(Java)解答
- leetcode 【 Linked List Cycle II 】 python 实现
- Linked List Cycle leetcode II java (寻找链表环的入口)
- Java for LeetCode 142 Linked List Cycle II
- 【LeetCode-面试算法经典-Java实现】【092-Reverse Linked List II(反转单链表II)】
- Linked List Cycle leetcode II java (寻找链表环的入口)
- 【LeetCode】141 Linked List Cycle (java实现)
- LeetCode 142 — Linked List Cycle II(C++ Java Python)
- [Leetcode][JAVA] Linked List Cycle I && II
- 【LeetCode】141 Linked List Cycle (java实现)
- [Leetcode] Linked List Cycle II (Java)
- LeetCode 之 Linked List Cycle I II — C++ 实现
- LeetCode — Linked List Cycle II 解题报告
- Leetcode: Linked List Cycle II
- [LeetCode]Linked List Cycle II
- [LeetCode] Linked List Cycle II, Solution
- Leetcode: Linked List Cycle II
- [Leetcode 141 & 142, medium] Linked List Cycle (I and II)