判断一个链表是否有环--剑指offer
来源:互联网 发布:游戏编程要学java 编辑:程序博客网 时间:2024/06/08 16:06
思路:如果开始有两个指针指向头结点,一个走的快,一个走的慢,如果有环的话,最终经过若干步,快的指针总会超过慢的指针一圈从而相遇。
class ListNode { String val; ListNode next; public ListNode(String val) { this.val = val; }}public class Main { boolean hasCycle(ListNode head) { ListNode fast = head, slow = head; while (fast != null && fast.next != null) {//这个条件“fast.next != null”需要加上,防止一个结点时报错。 fast = fast.next.next;//如果是3->null不报错,如果是如果是3->null->null则报错,因为空结点没有下一次个结点// fast = fast.next.next.next.next;这里一次往后走四步也行,三步也行 slow = slow.next; if (fast == slow) return true; } return false; }//hasCycle //测试 public static void main(String[] args) { ListNode node1 = new ListNode("A"); ListNode node2 = new ListNode("B"); ListNode node3 = new ListNode("C"); ListNode node4 = new ListNode("D"); ListNode node5 = node2;//这里是有无环,不是有无重复的结点数值!!!! ListNode node6 = node3; node1.next = node2; node2.next = node3; node3.next = node4; node4.next = node5; node5.next = node6; System.out.println(new Main().hasCycle(node1));//true// ListNode node1 = new ListNode("A");// ListNode node2 = new ListNode("B");// node1.next = node2;// System.out.println(new Main().hasCycle(node1));//false// ListNode node1 = new ListNode("A");// System.out.println(new Main().hasCycle(node1));//false }}
阅读全文
0 0
- 判断一个链表是否有环--剑指offer
- 判断一个链表是否有环
- 判断一个链表是否有环
- 判断一个链表是否有环
- 判断一个链表是否有环
- 判断一个链表是否有环
- 判断一个链表是否有环
- 判断一个链表是否有环
- 判断一个链表是否有循环
- 判断一个链表是否有环的方法
- 怎样判断一个链表是否有环
- 判断一个单向链表是否有环
- [算法]判断一个链表是否有环
- 判断一个单向链表是否有环
- 如何判断一个链表是否有环?
- 判断一个链表是否有环以及长度
- 如何判断一个链表是否有环?
- 判断一个单向链表是否有环和判断一个单向链表是否是循环链表
- mapreduce的原理
- iframe jquery自适应高度(二)
- Spring与Hibernate整合的applicationContext.xml文件配置
- python 的变量和注释及简单的用户交互
- JavaScript之this学习笔记
- 判断一个链表是否有环--剑指offer
- 去除视频广告
- CentOS 6 安装VNC Server实现图形化访问
- memcached安装使用配置
- Java消息队列--ActiveMq简单实例
- HDU 6072 Logical Chain (Biset+Kosaraju, 2017 Multi-Univ Training Contest 4)
- solr6.6.0实时更新mysql数据
- python简单验证码识别
- 【BZOJ 1901】 Zju2112 Dynamic Rankings 主席树+树状数组