寻找单向链表中是否存在环

/*环:在一个单链表中存在一个循环子链表,有两种解题思路
思路一:从当前head出发,每前进一步就往回比较所有前驱节点,看是否是相同节点,若是则存在环、
思路二:定义快慢指针,快指针每次走两步,慢指针每次走一步,若快慢指针相遇,则存在环,否则不存在环

这里采用快慢指针的方法
*/

 //这是一个定义好的节点
  class ListNode {   
      int val;
      ListNode next;
      ListNode(int x) {
        val = x;
         next = null;
     }
 }


public class Solution {
    public boolean hasCycle(ListNode head) {
        if(head==null || head.next==null){//空链表势必不存在环
            return false;

         }
        //定义快慢指针
        ListNode fast = head;
        ListNode slow = head;//快慢指针都从head开始走 
        while(fast != null && fast.next != null){//遍历循环终止条件
            //遍历
            fast = fast.next.next;//快指针走两步
            slow = slow.next;//慢指针走一步
            if(fast == slow){//快慢指针相等说明找到了
                return true;}
        }
        return false;//遍历结束都没有找到环的话说明没有找到
    }
}

猜你喜欢

转载自blog.csdn.net/vivian233/article/details/114790315