java数据结构中,怎么判断单链表中是否存在循环链表

1 篇文章 0 订阅
1 篇文章 0 订阅

本文章分为两部分

一、设置链表的节点LoopNode信息

public class LoopNode {
    int data;
    LoopNode next = this;

    public LoopNode(int data) {
        this.data = data;
    }

    public LoopNode next() {     //此方法显示下一个节点
        return this.next;
    }

    public int getData() {           //此方法 获取当前节点的值
        return this.data;
    }

//删除当前节点的下一个节点

   public void remove(){
//        取当前节点的下下一个节点
        if(this.next.next == null){
            this.next = this;
        }else{
            Node nextNext = this.next.next;
            this.next = nextNext;
        }
    }

    public void after(LoopNode node) {        //插入节点
        // 取出一个点为下下一个节点
        LoopNode nextNext = this.next;
        // 把新节点作为当前节点的下一个节点
        this.next = node;
        // 再把下下节点 赋给新节点的下一个节点
        node.next = nextNext;
    }

}

 

二、下面简历一个测试类  

检测是否有环的思想是 

1、给方法传入一个当前节点

2、获得当前节点的下一个节点为慢指针,获得当前节点的下下一个节点为快指针 

3、当慢指针追上快指针时  代表有循环回路    否则无循环链表  

下面用代码创建一个如下图的循环链表:

public class TestLoopNode {
    public static void main(String[] args) {
        
        LoopNode l1 = new LoopNode(1);
        LoopNode l2 = new LoopNode(2);
        LoopNode l3 = new LoopNode(3);
        l1.after(l2);
        l2.after(l3);
        System.out.println(isLoop(l1));
    }

//    判断是否有环   head从当前节点开始寻找
public static String isLoop(LoopNode head){
        LoopNode slow = head;
        LoopNode fast = head;

//如果存在空节点 ,说明不存在环
        if(head == null){
            return "无环";
        }

//试想如果一个环,你是找不到空节点的,两个步长不一致的指针迟早要相遇
        while(slow !=null && fast != null){
            slow = slow.next;
            fast = fast.next.next;
            if(slow == fast){
                return "有环";
            }
        }
        return "无环";
    }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值