http://blog.csdn.net/zhuxiaoyang2000/article/details/6589380
判断链表中是否有环:
方法一:蛮力法。
方法二:在链表中增加一个域visited,初始化都为0,从链表的头部开始走,每走过一个链表就标记visited为1,如果要访问的下一个节点的visited域为1,那么证明链表中有环。
方法三:如果不能增加域,可以设置一个数组,将已经访问的链表节点依次放入到数组中,在访问下一个节点时,如果这个节点的地址已经在数组中,那么也能证明链表中有环。
方法四:两个指针,一个走得快一点,一个走得慢一点,就像两个人在操场跑步,快的那个人肯定能再次遇到跑得慢得那个人!
/**
* 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) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
ListNode p = head;
ListNode q = head;
while(q != null && q.next != null) {
p = p.next;
q = q.next.next;
if(p == q)
return true;
}
return false;
}
}