博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单链表中是否有环之java实现
阅读量:5099 次
发布时间:2019-06-13

本文共 1731 字,大约阅读时间需要 5 分钟。

  这是一道微软经典笔试题,就是两个指针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
    slow = a.head; Node
    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;     } }

     

转载于:https://www.cnblogs.com/yueliming/archive/2013/01/14/2859947.html

你可能感兴趣的文章
Repeater用ul li,一行显示多条数据
查看>>
Java并发(四):并发集合ConcurrentHashMap的源码分析
查看>>
5. Longest Palindromic Substring
查看>>
Maven 三种archetype说明
查看>>
oracle自关联表的子删父变功能实现
查看>>
程序员需要具备的基本技能
查看>>
jsoncpp cmake
查看>>
Web消息主体风格(Message Body Style)
查看>>
eclipse- 智能提示设置
查看>>
回调函数实例——数学计算
查看>>
C#文件路径乱码
查看>>
俞伯牙摔琴谢知音的故事
查看>>
【简单dp】2080->最长公共子序列问题 动态规划
查看>>
数据库隔离级别
查看>>
C - Bear and Five Cards
查看>>
招聘工作告一段落
查看>>
druid数据源的加密解密工具
查看>>
swfupload详解
查看>>
python-微博模拟登陆
查看>>
Python【11】【前端编程】- HTML基础
查看>>