运用快慢指针判断链表是否有环

例题可以参见LeetCode中的 Linked list circle  http://oj.leetcode.com/problems/linked-list-cycle/

解题思路就是运用快慢指针来判断链表中是否有环

让慢指针一次走一步,快指针一次走两步,如果链表中含有环,快的指针会再次和慢的指针相遇。

/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
 // use fast pointer & slow pointer,judge whether Linkedlist has a circle 
 //fast pointer foot two once; slow pointer foot one step once
 //if Linkedlist has a circle ,fast will came across slow
public class Solution {
    public boolean hasCycle(ListNode head) {  
        // IMPORTANT: Please reset any member data you declared, as  
        // the same Solution instance will be reused for each test case.  
        ListNode slow = head;  
        ListNode fast = head;  
       //fast==null  in case empty Linkedlist
       //fast.next.next!=null,make sure list is not our border
        while(fast != null && fast.next != null) {  
            slow = slow.next;  
            fast = fast.next.next;  
            if(slow == fast)  
                return true;  
        }  
        return false;  
    }  
}  
  //fast==null 是空链表的情况
  //否则就是fast遍历到结束的标志,为了防止fast.next.next出界,先确保fast.next不是链表的尾

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值