算法卷轴(数据卷)[链表的环]

public class Main {

    // 节点类:数据,下一个节点
    static class Node {
        private Integer data;
        private Node next;

        public Integer getData() {
            return data;
        }

        public void setData(Integer data) {
            this.data = data;
        }

        public Node getNext() {
            return next;
        }

        public void setNext(Node next) {
            this.next = next;
        }
    }

    static Node node1 = new Node();

    // 判断是否有环:2个变量都指向节点1,指针1走一步,指针2走两步,能相遇代表有环
    static boolean hasRound() {
        Node pointer1 = node1;
        Node pointer2 = node1;
        while (pointer1.getNext() != null && pointer2.getNext() != null) {
            pointer1 = pointer1.getNext();
            pointer2 = pointer2.getNext().getNext();
            if (pointer1 == pointer2) {
                return true;
            }
        }
        return false;
    }

    // 获取环的长度:第一次相遇开始计数,直到第二次相遇,就是环的长度
    static Integer getLen() {
        Integer len = 0;
        Node pointer1 = node1;
        Node pointer2 = node1;
        int i = 0;
        while (pointer1.getNext() != null && pointer2.getNext() != null) {
            len++;
            pointer1 = pointer1.getNext();
            pointer2 = pointer2.getNext().getNext();
            if (pointer1 == pointer2) {
                i++;
                if (i == 2) {
                    return len;
                } else {
                    len = 0;
                }
            }
        }
        return 0;
    }

    // 获取入环节点:第一次相遇后,把指针1指向起始节点,指针1和指针2都每次走一步,直到再次相遇,指向的节点就是入环点
    static Node getInNode() {
        Node pointer1 = node1;
        Node pointer2 = node1;
        while (pointer1.getNext() != null && pointer2.getNext() != null) {
            pointer1 = pointer1.getNext();
            pointer2 = pointer2.getNext().getNext();
            if (pointer1 == pointer2) {
                break;
            }
        }
        pointer1 = node1;
        while (pointer1 != pointer2) {
            pointer1 = pointer1.getNext();
            pointer2 = pointer2.getNext();
        }
        return pointer1;
    }

    public static void main(String[] args) {
        node1.setData(1);
        Node node2 = new Node();
        node2.setData(2);
        Node node3 = new Node();
        node3.setData(3);
        Node node4 = new Node();
        node4.setData(4);

        node1.setNext(node2);
        node2.setNext(node3);
        node3.setNext(node4);
        node4.setNext(node2);

        if (hasRound()) {
            System.out.println("环长:" + getLen());
            System.out.println("入环点:" + getInNode().getData());
        }
    }

}
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 、 1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READmE.文件(md如有),本项目仅用作交流学习参考,请切勿用于商业用途。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值