博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单链表是否有环的问题解决与讨论(java实现)
阅读量:5359 次
发布时间:2019-06-15

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

单链表是否有环的问题经常在面试中遇到,一般面试中会要求空间为O(1);再者求若有环,则求环产生时的起始位置。

下面采用java实现。

//单链表 class ListNode{     int val;     ListNode next;     ListNode(int x){         val=x;         next=null;     }}public class SearchCycleNode{    ListNode equalListNode=null;//来记录判断有环时出现的相等的时的节点,姑且叫"相遇"节点。   //从"相遇"节点出发,第一个可达的节点(从单链表的头节点开始)即是单链表的环产生的起始位置    public ListNode detectCycle(ListNode head) {            if(!hasCycle(head)) return null;            ListNode p=head;            while(!isReach(p)){                p=p.next;            }            return p;                }    //判断从相遇的节点到 head节点可达性    private boolean isReach(ListNode head){         if(head==equalListNode)return true;          ListNode p=equalListNode.next;        while(p!=equalListNode){           if(p==head)return true;           p=p.next;        }        return false;    }    //判断是否有环,通过一个指针p走一步,一个指针q走两步,如果能出现p=q的情况,则有环,并记录p为"相遇"节点。    private boolean hasCycle(ListNode head) {           if(head==null)return false;           if(head.next==null)return false;           ListNode p=head;           ListNode q=head.next;           while(p!=q){              if(p.next==null)return false;              p=p.next;              if(q.next==null)return false;              if(q.next.next==null)return false;              q=q.next.next;           }           equalListNode=p;           return true;                 }}

 

转载于:https://www.cnblogs.com/big-sun/p/4077555.html

你可能感兴趣的文章
C语言_第五章__实践(密码转换)
查看>>
docker 容器后台运行命令
查看>>
jquery 获取css position的值
查看>>
面向对象的程序设计
查看>>
a标签添加点击事件
查看>>
Context.startActivity出现AndroidRuntimeException
查看>>
Intellij idea创建javaWeb以及Servlet简单实现
查看>>
代理网站
查看>>
Open multiple excel files in WebBrowser, only the last one gets activated
查看>>
FFmpeg进行视频帧提取&音频重采样-Process.waitFor()引发的阻塞超时
查看>>
最近邻与K近邻算法思想
查看>>
【VS开发】ATL辅助COM组件开发
查看>>
FlatBuffers In Android
查看>>
《演说之禅》I & II 读书笔记
查看>>
thinkphp3.2接入支付宝支付接口(PC端)
查看>>
response和request
查看>>
【转】在Eclipse中安装和使用TFS插件
查看>>
回到顶部浮窗设计
查看>>
C#中Monitor和Lock以及区别
查看>>
【NOIP2017】奶酪
查看>>