zoukankan      html  css  js  c++  java
  • 单链表中是否有环之java实现

      这是一道微软经典笔试题,就是两个指针h1,h2都从头开始遍历单链表,h1每次向前走1步,h2每次向前走2步,如果h2碰到了NULL,说明环不存在;如果h2碰到本应在身后的h1说明环存在(也就是发生了套圈)。

    1. 如果环不存在,一定是h2先碰到NULL:
    2. 如果环存在,h2与h1一定会相遇,而且相遇的点在环内:h2比h1遍历的速度快,一定不会在开始的那段非环的链表部分相遇,所以当h1,h2都进入环后,h2每次移动都会使h2与h1之间在前进方向上的差距缩小1,最后,会使得h1和h2差距减少为0,也即相遇
    3. package org.myorg;
      public class Test{
      public static boolean isExsitLoop(SingleList a) {
      Node<T> slow = a.head; Node<T> fast = a.head; while (fast != null && fast.next != null) { slow = slow.next;
      fast = fast.next.next; if (slow == fast) return true; } return false; }



      public static void main(String args[]){
          SingleList list = new SingleList();
      for(int i=0;i<100;i++){
            list.add(i);
      }
      System.out.print(SingleList.isExistingLoop(list));
      }
      }
      package org.myorg;
      public
      class Node{ public Object data; //节点存储的数据对象 public Node next; //指向下一个节点的引用 public Node(Object value){ this.data = value; } public Node(){
            this.data = null;
      this.next = null; } }
      package org.myorg;
      public class SingleList{
          private int size;
          private Node head;
      
      
          private void init(){
              this.size = 0;
              this.head = new Node();  
      }

      public SingleList(){
               init();
      }

      public boolean contains(Object value){
      boolean flag = false;
      Node p = head.next;
      while(p!=null){

              if(value.equals(p.data)){

                 flag = true;

                 break;

             }else(

                  p = p.next;

                 ) 

           }

          return flag;

        }

      public boolean add(Object value){
           if(contains(value))
      return false;
      else{
           Node p = new Node(value);
      p.next=head.next;
      head.next = p;
      size++;
      }
      return true;
      }


      }
  • 相关阅读:
    LeetCode 811. Subdomain Visit Count (子域名访问计数)
    LeetCode 884. Uncommon Words from Two Sentences (两句话中的不常见单词)
    LeetCode 939. Minimum Area Rectangle (最小面积矩形)
    LeetCode 781. Rabbits in Forest (森林中的兔子)
    LeetCode 739. Daily Temperatures (每日温度)
    三种方式实现按钮的点击事件
    239. Sliding Window Maximum
    14.TCP的坚持定时器和保活定时器
    13.TCP的超时与重传
    12.TCP的成块数据流
  • 原文地址:https://www.cnblogs.com/yueliming/p/2859947.html
Copyright © 2011-2022 走看看