2018-08-21

算法题之判断单链表是否有环

判断单链表是否有环的算法核心思想是用两个指针,一个走的慢,一个走得快,如果两个相遇了则代表有环,如果不相遇则代表无环。这里可以定义第一个指针每次走一步,第二个指针每次走两步,这样便可以判断单链表中是否有环。

class Node{
    int val;
    Node next;
    public Node(int val){
        this.val =val;
    }
}
public class LinkedLoop {
    public static boolean hasLoop(Node head){
        Node p1 = head;
        Node p2 = head;
        while(p2!=null&&p2.next!=null){
            p1=p1.next;
            p2=p2.next.next;
            if(p2==null)
                return false;
            if(p1.val==p2.val)
                return true;
        }
        return false;
    }
    public static void main(String[] args){
        Node n1 = new Node(1);
        Node n2 = new Node(3);
        Node n3 = new Node(6);
        Node n4 = new Node(4);
        Node n5 = new Node(5);
        Node n6 = new Node(10);
        n1.next = n2;
        n2.next = n3;
        n3.next = n4;
        n4.next = n5;
        n5.next = n6;
        n6.next = n5;
        System.out.println(hasLoop(n1));    
    }
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 搞懂单链表常见面试题 Hello 继上次的 搞懂基本排序算法,这个一星期,我总结了,我所学习和思考的单链表基础知识...
    醒着的码者阅读 10,057评论 1 45
  • 我把船划向外太空 大浆拨弄着夜空努力划向远方 你知道,无所谓终点 别嘲笑浩瀚,也别嘲笑远方 那掩藏不起哀痛和悲凉 ...
    于十六阅读 3,038评论 2 5
  • 1. 怎么写才有人看?怎样写才更有意义?这是我一直都在思考的问题。 今天为什么会写这篇文章呢?那是源于“我在简书过...
    文晓玲阅读 3,146评论 11 15