首页>>后端>>java->Java实现判断环形链表

Java实现判断环形链表

时间:2023-11-30 本站 点击:2

前言

LeetCode算法第141题,是判断环形链表。

其实这题算是比较简单,思路也不复杂,这次就把Java的代码简单实现一下。

方式一:无限循环

/***方式一:无限循环*/privatestaticbooleantest1(ListNodehead){inti=0;booleanfal=false;ListNodenext=head;while(next!=null){if(i>10000000){fal=true;break;}i++;next=next.next;}returnfal;}

方式二:hash表

privatestaticbooleantest2(ListNodehead){Set<ListNode>set=newHashSet<>();booleanfal=false;ListNodenext=head;while(next!=null){if(set.contains(next)){fal=true;break;}set.add(next);next=next.next;}returnfal;}

方式三:双指针

/***方式三:双指针*/privatestaticbooleantest3(ListNodehead){booleanfal=false;//快、慢指针ListNodeindex=head;ListNodenext=head;while(next!=null){ListNodetoIndex;if(null==index||(toIndex=index.next)==null||(index=toIndex.next)==null){break;}next=next.next;if(next==index){fal=true;break;}}returnfal;}

测试数据准备

/***判断链表是否有环**@Author:ZRH*@Date:2021/10/913:57*/publicclassTest1{/***方式一:无限循环*方式二:hash表*方式三:双指针**@paramargs*/publicstaticvoidmain(String[]args)throwsIOException{finalListNodelistNode=buildNode();//方式一:无限循环System.out.println("方式一:无限循环:"+test1(listNode));//方式二:hash表System.out.println("方式二:hash表:"+test2(listNode));//方式三:双指针System.out.println("方式三:双指针:"+test3(listNode));}/***构建链表结构**@return*/privatestaticListNodebuildNode(){ListNodefirst=newListNode(1);ListNodenext=first;ListNodelinkListNode=null;for(inti=2;i<100000;i++){ListNodelistNode=newListNode(i);next.setNext(listNode);next=listNode;if(i==70000){linkListNode=listNode;}}//随机制作环next.setNext(linkListNode);returnfirst;}/***自定义链表节点*/@DataprivatestaticclassListNode{privateListNodenext;privateIntegervalue;publicListNode(Integervalue){this.value=value;}@OverridepublicinthashCode(){returnvalue.hashCode();}}}

最后

虚心学习,共同进步 -_-


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/java/4998.html