標籤:鏈表 java leetcode 指標 環
一、原題
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?
二、分析
選用兩個指標掃描鏈表,一個速度快,一個速度慢,若兩個指標相遇,說明有環。
三、代碼(java)
/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public boolean hasCycle(ListNode head) { boolean result=false;if(head==null||head.next==null){}else{ ListNode fast,slow; slow=head; fast=head; while(fast!=null) { if(fast.next==null||fast==null) break; else{ fast=fast.next.next; slow=slow.next; } if(fast==slow){ result=true; break; } }}return result; }}
四
關於快慢指標相遇表明鏈表有環的證明:
http://umairsaeed.com/2011/06/23/finding-the-start-of-a-loop-in-a-circular-linked-list/。
比較直觀的解釋,如果兩個點在一個圓上跑,方向相同,只要速度不一樣就一定會相遇,在直線上則不一定。
【Leetcode】Linked List Cycle