快慢指针解决单向链表是否有环的一系列问题
来源:互联网 发布:淘宝积分 编辑:程序博客网 时间:2024/05/23 21:58
talk is cheap,show me the code......
package singleLinkedList;/** * @author Leon* @date 创建时间:2017年10月15日 下午6:13:40* @version 1.0* 类说明 :* 单向链表相关问题 例如:1 - 2 - 3 - 4 - 5 - 6 - 4 - .....* 1、是否有环* 2、环的长度* 3、带环链表的实际长度*/public class Test{public static void main(String[] args){Node n1 = new Node(1);Node n2 = new Node(2);Node n3 = new Node(3);Node n4 = new Node(4);Node n5 = new Node(5);Node n6 = new Node(6);n1.next = n2;n2.next = n3;n3.next = n4;n4.next = n5;n5.next = n6;n6.next = n4;System.out.println(isHoop(n1));System.out.println(getLengthOfHoop(n1));System.out.println(getLengthOfList(n1));}/* * 对于问题1,使用追赶的方法,设定两个指针slow、fast,从头指针开始,每次分别前进1步、2步。 * 如存在环,则两者相遇;如不存在环,fast遇到NULL退出 */private static String isHoop(Node n1){Node slow, fast;slow = n1;fast = n1;while (fast != null){fast = fast.next.next;slow = slow.next;if (fast == slow){return "链表有环哦~";}}return "链表没环哦~";}/* * 对于问题2,记录下问题1的碰撞点p,slow、fast从该点开始,再次碰撞所走过的操作数就是环的长度s。 */private static String getLengthOfHoop(Node n1){Node slow, fast, p = null;slow = n1;fast = n1;while (fast != null){fast = fast.next.next;slow = slow.next;if (fast == slow){p = fast;//System.out.println(p.value);break;}}if (p == null){return "链表没环";}slow = p.next;fast = p.next.next;int operation = 1;while (slow.value != fast.value){slow = slow.next;fast = fast.next.next;operation++;}return "环的长度是:"+String.valueOf(operation);}/* * 对于问题3,和前半部分加在一起就可以了。 */private static String getLengthOfList(Node n1){Node slow, fast, p = null;slow = n1;fast = n1;while (fast != null){fast = fast.next.next;slow = slow.next;if (fast == slow){p = fast;//System.out.println(p.value);break;}}if (p == null){return "链表没环";}slow=n1;int result=0;while(slow.value!=p.value){result++;slow=slow.next;//System.out.println("hello");}//System.out.println(result);//System.out.println(getLengthOfHoop(n1).charAt(getLengthOfHoop(n1).length()-1));int resultT = result+Character.getNumericValue(getLengthOfHoop(n1).charAt(getLengthOfHoop(n1).length()-1));//System.out.println(resultT);return "链表长度:"+resultT;}}class Node{public int value;public Node next = null;public Node(int value){super();this.value = value;}}
阅读全文
0 0
- 快慢指针解决单向链表是否有环的一系列问题
- 快慢指针判断单向链表是否有环及找环入口
- 运用快慢指针判断链表是否有环
- 链表趣题---快慢指针判断链表是否有环
- 判断链表是否有环为什么快慢指针一定会相遇
- 141.leetcode Linked List Cycle(easy)[链表是否有环 快慢指针]
- 为什么用快慢指针检测链表是否有环的时候,快指针的步长选择的是2,而不是3,4,5?
- 检测单链表中是否有环--快慢指针法
- 检测单链表中是否有环--快慢指针法
- 检测单链表中是否有环--快慢指针法
- 检测单链表中是否有环--快慢指针法
- 检测单链表中是否有环--快慢指针法
- 单向链表判断是否有环
- 判断单向链表是否有环
- 快慢链表和快慢指针
- 快慢指针在链表的应用
- 快慢指针在链表的应用
- 快慢指针,链表的排序
- 文章标题
- Unity中使用HTTP弱联网
- NOIP 2011 Mayan游戏
- NOIP2017提高组初赛游记 (题解&心得总结)(c++)
- Java中sleep()和wait()的区别
- 快慢指针解决单向链表是否有环的一系列问题
- Java IO流文件切割 与合并
- Android常用compile大全集合,持续不间断不定时更新
- 漫画:如何破解 MD5 算法?
- 分治算法,动态规划,贪婪算法以及递归之间的区别与联系
- CodeForces
- Myeclipse2016开发环境配置
- Kaggle之Titanic
- js-如何在两个页面之间互相传递数据?