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;
      }


      }
  • 相关阅读:
    hdu 1290 献给杭电五十周年校庆的礼物 (DP)
    hdu 3123 GCC (数学)
    hdu 1207 汉诺塔II (DP)
    hdu 1267 下沙的沙子有几粒? (DP)
    hdu 1249 三角形 (DP)
    hdu 2132 An easy problem (递推)
    hdu 2139 Calculate the formula (递推)
    hdu 1284 钱币兑换问题 (DP)
    hdu 4151 The Special Number (DP)
    hdu 1143 Tri Tiling (DP)
  • 原文地址:https://www.cnblogs.com/yueliming/p/2859947.html
Copyright © 2011-2022 走看看