阿里P7告诉你如何用JAVA程序来查找链接列表是否包含循环

阿里P7告诉你如何用JAVA程序来查找链接列表是否包含循环

查找链表是否包含循环的算法

迭代链表时使用快速和慢速两个指针。快速指针在每次迭代中移动两个节点,而慢速指针移动到一个节点。如果链表包含循环或循环,那么在迭代过程中,快指针和慢指针都会在某个点上相遇。如果它们不相交,并且快速或慢速将指向空,那么链表就不是循环的,它不包含任何循环。这是精确的算法

  1. 使用快速和慢速两个指针
  2. 每次迭代快速移动两个节点,慢速移动一个节点
  3. 如果快速和慢速相遇,则链表包含循环
  4. 如果fast指向空或fast.next指向空,则链表不是循环的。

下一部分包含Java程序来检查链表是否包含循环,这是上述算法的精确实现。该算法也被称为Floyd的循环查找算法,通常被称为Tortoise and Hare算法,用于查找链表中的循环。

Java程序检查链表是否为循环

这个Java程序使用LinkedList(不Java.UTI.LIKEDLIST)和链表的前一个节点类,修改了添加ToStTrn()方法和AppEntoTead()方法。另外,链表的iscyclic()方法用于实现逻辑,以确定链表是否包含循环。随后is cyclic()如果链表是循环的,则返回true,否则返回false。

阿里P7告诉你如何用JAVA程序来查找链接列表是否包含循环

阿里P7告诉你如何用JAVA程序来查找链接列表是否包含循环

测试循环的链表

在本节中,我们将使用带有两个链表的Java main方法测试,一个包含循环而另一个不循环。 您甚至可以为isCyclic()方法编写JUnit测试用例,以测试不同位置的循环的不同链表。 这是链表不包含任何循环的第一个测试。

阿里P7告诉你如何用JAVA程序来查找链接列表是否包含循环

现在让我们改变链表,使其包含循环

阿里P7告诉你如何用JAVA程序来查找链接列表是否包含循环

写在最后:

欢迎留言讨论,如需Java方面的架构资料,我这里刚好有一份,怎么领取→→→关注+转发 然后私信“架构资料” 即可领取

点关注,不迷路,持续更新!!!


分享到:


相關文章: