美文网首页
链表——链表中环的检测

链表——链表中环的检测

作者: 柚子过来 | 来源:发表于2018-10-14 19:44 被阅读0次
package linkedlist;

public class ReverseListNew {

   static class Node{
    int val;
    Node next;
    Node(int item) {
        this.val = item;
        this.next = null;
    }
}

/***
 * 找出链表中环入口的位置,返回该位置的值,如果没有环返回-1
 * 这里为了说明例子,假定节点的值都是正数,所以返回值用-1表示没环情况
 * */
   public static int checkLoop(Node head) {
   if(head == null || head.next == null) {
       return -1;
   }
   Node fast = head.next.next;
   Node slow = head.next;
    Node meet = null;
   while (fast!=null && fast.next!=null) {
       if(fast.val == slow.val) {
           meet = fast;
           break;
       }
       fast = fast.next.next;
       slow = slow.next;
   }

   if(meet == null)
      return  -1;

   while (head.val!= meet.val) {
       head = head.next;
       meet = meet.next;
   }
   return  meet.val;
   }



public static void main(String[] args) {

    Node node = new Node(0);
    Node node1 = new Node(1);
    Node node2 = new Node(2);
    Node node3 = new Node(3);
    Node node4 = new Node(4);
    Node node5 = new Node(5);
    node.next = node1;
    node1.next = node2;
    node2.next = node3;
    node3.next = node1;  ///node1是环的入口,所以函数返回1
    node4.next = node5;

    System.out.println(checkLoop(node));
}
}

相关文章

  • 关于链表经典算法题都在这里了

    1.单链表反转(LeetCode 206) 2.链表中环的检测 (LeetCode 141) 3.求链表中环开始结...

  • 常见算法总结

    链表 单链表反转链表中环的检测两个有序的链表合并删除链表倒数第 n 个结点求链表中间第n个节点

  • 链表

    链表 单链表反转链表中环的检测两个有序链表合并删除链表倒数第n个节点求链表的元素总个数 一.单向链表 链表共有特征...

  • 链表——链表中环的检测

  • 链表--链表中环的检测

    给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索...

  • 链表中环检测

  • 链表算法归纳

    1.单链表反转 2.链表中环的检测 3.两个有序的链表合并 4.删除链表倒数第n个结点 5.求链表的中间结点

  • 链表中环的检测

    1. 怎么检测一个单向链表中是否有环 同样借助于快慢指针,思路如下: 定义 fast、slow 两个指针同时指向链...

  • 链表中环的检测

  • 链表中环的检测

    思路一:哈希表 我们遍历链表中的每个节点,并将它记录下来;一旦遇到了此前遍历过的节点,就可以判定链表中存在环。借助...

网友评论

      本文标题:链表——链表中环的检测

      本文链接:https://www.haomeiwen.com/subject/izttzftx.html