用Java实现判断链表是否有环,环的大小,环的长度以及计算链表的长度
来源:互联网 发布:手机淘宝客户端在哪里 编辑:程序博客网 时间:2024/05/28 17:04
public static void main(String[] args) {
Node list = new Node();
Node top = list;
list.n=1;
for(int i = 2;i < 10; i++){
//list的next指向一个新的Node
list.next = new Node();
//新的Node的n赋值为i
list.next.n=i;
//list指向新的Node
list = list.next;
}
list.next = top.next.next.next;
list=top; //让list回到起点,指向头结点
//1.判断有没有环
Node list1 = top;//都至于起点即根节点 慢
Node list2 = top; //快
//思想:两个数同时跑,如果相遇,即是有环
boolean flag=false;
for(;(!(list1==list2))||(list1==list2&&list1==top);){
System.out.println("进入循环了");
if(list1==null||list1.next==null){
flag=true;
break;
}
list1=list1.next;
list2=list2.next.next;
System.out.println(list1.n + ":" + list2.n);
}
if(flag==true){
System.out.println("此链表没有环");
}else if(flag==false){
System.out.println("此链表有环");
}
//2.环的大小是多少?让他俩在相遇点一起跑,再次相遇慢的跑的举例即是环的长度
int count=0;
for(;;){
list1=list1.next;
list2=list2.next.next;
count++;
if(list1==list2){
break;
}
}
System.out.println("环的长度是:" + count);
//3环的切入点是多少?
list1=top;
for(;!(list1==list2);){
list1=list1.next;
list2=list2.next;
}
System.out.println("环的切入点是"+list1.n);
//4.链表的长度:
list1=top;
for(;!(list1==list2);){
list1=list1.next;//将一个拉回节点
count++;
}
System.out.println("链表的长度为:" + count);
}
}
//链表的节点:
class Node{
int n;
Node next;
}
Node list = new Node();
Node top = list;
list.n=1;
for(int i = 2;i < 10; i++){
//list的next指向一个新的Node
list.next = new Node();
//新的Node的n赋值为i
list.next.n=i;
//list指向新的Node
list = list.next;
}
list.next = top.next.next.next;
list=top; //让list回到起点,指向头结点
//1.判断有没有环
Node list1 = top;//都至于起点即根节点 慢
Node list2 = top; //快
//思想:两个数同时跑,如果相遇,即是有环
boolean flag=false;
for(;(!(list1==list2))||(list1==list2&&list1==top);){
System.out.println("进入循环了");
if(list1==null||list1.next==null){
flag=true;
break;
}
list1=list1.next;
list2=list2.next.next;
System.out.println(list1.n + ":" + list2.n);
}
if(flag==true){
System.out.println("此链表没有环");
}else if(flag==false){
System.out.println("此链表有环");
}
//2.环的大小是多少?让他俩在相遇点一起跑,再次相遇慢的跑的举例即是环的长度
int count=0;
for(;;){
list1=list1.next;
list2=list2.next.next;
count++;
if(list1==list2){
break;
}
}
System.out.println("环的长度是:" + count);
//3环的切入点是多少?
list1=top;
for(;!(list1==list2);){
list1=list1.next;
list2=list2.next;
}
System.out.println("环的切入点是"+list1.n);
//4.链表的长度:
list1=top;
for(;!(list1==list2);){
list1=list1.next;//将一个拉回节点
count++;
}
System.out.println("链表的长度为:" + count);
}
}
//链表的节点:
class Node{
int n;
Node next;
}
阅读全文
1 0
- 用Java实现判断链表是否有环,环的大小,环的长度以及计算链表的长度
- 判断链表是否有环,以及如果有环求环的长度和环开始的节点
- 【面试】3.如何判断链表是否有环?如何计算环的长度?
- 如何判断链表是否有环?如何计算环的长度?
- 判断一个链表是否有环以及长度
- 如何判断链表有没有环,环的大小?环的切入点在哪里以及链表的长度(分别用javascrip和Java代码实现)
- 【链表】判断链表是否有环,环的长度,环的入口点
- 如何判断是否有环,如何计算环的长度,如何判断环的入口点
- 链表与环的三个问题:判断是否有环,求环的长度,求环的起点
- 判断单链表是否有环,以及如何找起始点,环的长度
- Java单链表基本操作(十)--判断单链表是否有环并输出环长度以及环的入口节点
- 链表是否构成环、环的长度以及环的入口点的求法
- 单链表是否有环,环的大小,第一个连接点,有环的单链表长度
- 判断链表是否带环?若带环求环的长度?求环的入口点?
- 计算单向链表的的长度,有可能有环存在
- 判断链表是否带环?若带环求环的长度?若带环求环的入口点?并计算以上每个问题的时间复杂度?
- 【算法之链表(一)】判断单链表中是否有环、环的长度、环的入口节点,单链表的倒数第K个节点等
- 链表问题:如何判断一个链表有环,以及环的长度,起始位置。
- 【算法小总结】广度优先搜索剖析
- linux安装curl
- 向集合中一次性添加一组元素的方法
- maven配置及更改仓库镜像为阿里云
- 01背包问题
- 用Java实现判断链表是否有环,环的大小,环的长度以及计算链表的长度
- 计算系数 解题报告
- viewPager item 变高在项目中的使用
- 约瑟夫环
- Android Tab类型主界面总结
- python 数据结构二 之 字符串
- java api操作hbase
- 用GDB调试程序
- 用两个栈实现队列(剑指Offer)