判断一个单链表是否有环,若有环,求进入环中的第一个节点
2017-07-19 17:23
323 查看
判断单向链表是否有环,可以采用快指针与慢指针两个指针的方式来解决。即定义一个快指针fast和一个慢指针slow,使得fast每次跳跃两个节点,slow每次跳跃一个节点。如果链表没有环的话,则slow与fast永远不会相遇(这里链表至少有两个节点);如果有环,则fast与slow将会在环中相遇。判断出链表有环以后,则需要算出进入环的第一个节点。在fast与slow第一次相遇后,设置一个节点p从链表的头部开始遍历,每次只遍历一个节点。这样,当fast与slow再次相遇时,p所处的位置便是环的首部。
1.判断一个单链表是否有环.
2.判断一个单链表中是否有环,若有环,求进入环中的第一个节点.
1.判断一个单链表是否有环.
Public static boolean hasCycle(listNode head) { boolean flag = false; ListNode fast = head; ListNode slow = head; while(fast != null && fast.next != null) { slow = slow.next; fast = fast.next.next; if(fast == slow){ flag = true; break; } return flag; }
2.判断一个单链表中是否有环,若有环,求进入环中的第一个节点.
Public ListNode getFirstNodeInCycle(ListNode head) { if(head == null) { return null; } else { ListNode fast = head; ListNode slow = head; while(fast != null && fast.next != null) { slow = slow.next; fast = fast.next.next; if(fast == slow){ //有环,则返回环的第一个节点 slow = head; while(slow != fast){ slow = slow.next; fast = fast.next; } return slow; } } return null; } }
相关文章推荐
- 如何判断单链表是否有环,如果有怎么找到进入环的节点
- [转]给定单链表,检测是否有环。如果有环,则求出进入环的第一个节点
- 判断一个单链表是否有环,若有,找出环的入口节点
- 判断两个单链表是否相交同时找出第一个相交点(单链表是否有环及寻找入口节点)
- 20140719 找到单链表的倒数第K个节点 判断一个链表是否成为一个环形 反转
- 给定单链表,检测是否有环。如果有环,则求出进入环的第一个节点
- 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bccced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中
- 判断单链表是否有环 并找出第一个相交的节点
- 判断单链表是否有环 并找出第一个相交的节点
- 合并链表,判断链表是否有环、是否相交,相交的第一个节点,进入环的第一个节点,O(1)时间复杂度删除某节点
- 判断一个节点是否在一棵二叉树中&判断一颗二叉树是是否是另一颗树的子树
- 四道有趣的单链表面试题(单链表反序、找出链表的中间元素、链表排序、判断一个单链表是否有环) (转)
- 四道有趣的单链表面试题(单链表反序、找出链表的中间元素、链表排序、判断一个单链表是否有环)
- 链表面试题----判断一个单链表是否带环,若带环,求入口点和环的长度
- 判断单链表中是否有环,找到环的入口节点
- 判断两个链表是否有公共节点并返回第一个公共节点
- 判断一个单链表是否是回文链表
- 判断一个单链表是否有环及环的链接点
- ngx自定义一个判断是否点击本节点的指令
- 转:判断两个单向链表是否相交,并找到两个单向链表的第一个相交节点