java链表是否有环(java 链表)

华为云服务器特价优惠火热进行中!

2核2G2兆仅需 38 元;4核4G3兆仅需 79 元。购买时间越长越优惠!更多配置及优惠价格请咨询客服。

合作流程:
1、点击链接注册/关联华为云账号:点击跳转
2、添加客服微信号:cloud7591,确定产品方案、价格方案、服务支持方案等;
3、客服协助购买,并拉微信技术服务群,享受一对一免费技术支持服务;
技术专家在金蝶、华为、腾讯原厂有多年工作经验,并已从事云计算服务8年,可对域名、备案、网站搭建、系统部署、AI人工智能、云资源规划等上云常见问题提供更专业靠谱的服务,对相应产品提供更优惠的报价和方案,欢迎咨询。

本篇文章给大家谈谈java链表是否有环,以及java 链表对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

微信号:cloud7591
如需了解更多,欢迎添加客服微信咨询。
复制微信号

本文目录一览:

用Java实现判断链表是否有环,环的大小,环的

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==list2list1==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;

}

public LinkList (Object obj)

{

firstNode = new Node();

firstNode.obj=obj;

lastNode =firstNode;

}

构造函数,只有一个node的list,firstNode和lastNode都指向它,这个是头结点

public void openedNode(Object obj)

{

lastNode =new Node();

lastNode =lastNode.nextNode;

lastNode.obj=obj;

}

如果这个方法是要在list中加个node的话就是写错了,它的Node中的nextNode是自己指向自己的,不是链表,是链表环, 应该是:

public void openedNode(Object obj)

{

lastNode =new Node();

firstNode.nextNode =lastNode;

lastNode.obj=obj;

}

这个方法是lastNode指向一个新的node,将firstNode中的nextNode引用指向lastNode,将lastNode中的obj赋值为obj参数,这样两个node就连起来了,构造函数中的Node叫头节点,里面不要放数据,Node类中最好有一个变量始终指向头结点,建议参考一下c语言数据结构的链表部分

循环链表的原理与实现

其实循环链表相对于单链表来讲只需要做一些小改动就好了,只需要将单链表尾结点的引用由null改为头结点就好了,这样子就形成了一个循环链表。循环链表相对于单链表来讲,可以从任意结点开始就可以遍历整个链表的所有结点,这是单链表无法做到的。

关于 约瑟夫环问题

,大家可以参考一下百度百科,实现的方法也有很多种,但是都逃不开用循环链表。

笔者用java来实现,感兴趣的也可以根据自己喜好的语言来进行实现。

急急急 如何用Java语言实现判断一个链表是否存在循环连接的算法

编写两个java类,一个为Linkitem.java,另一个为测试类LinklistTest.java,分别如下:

*****************************************************

//Linkitem.java

public class Linkitem {

Linkitem previous;

String data;

Linkitem next;

public Linkitem() {

}

public Linkitem(Linkitem previous, String data, Linkitem next) {

super();

this.previous = previous;

this.data = data;

this.next = next;

}

public Linkitem getPrevious() {

return previous;

}

public void setPrevious(Linkitem previous) {

this.previous = previous;

}

public String getData() {

return data;

}

public void setData(String data) {

this.data = data;

}

public Linkitem getNext() {

return next;

}

public void setNext(Linkitem next) {

this.next = next;

}

}

*****************************************************

//LinklistTest.java

import java.util.ArrayList;

public class LinklistTest {

public static void main(String[] args) {

//初始化链表项

Linkitem a = new Linkitem(null, "a", null);

Linkitem b = new Linkitem(null, "b", null);

Linkitem c = new Linkitem(null, "c", null);

Linkitem d = new Linkitem(null, "d", null);

a.setPrevious(d);

a.setNext(b);

b.setPrevious(a);

b.setNext(c);

c.setPrevious(b);

c.setNext(d);

d.setPrevious(c);

d.setNext(a);

//新建存放链表的数组列表

ArrayListLinkitem list = new ArrayListLinkitem();

//添加个链表项

list.add(a);

list.add(b);

list.add(c);

list.add(d);

//是否为循环链表的判断变量

boolean link = false;

Linkitem start = a;

Linkitem current = a;

//判断循环链表

for (int i = 0; i list.size(); i++) {

current = current.next;

if (start.data.equals(current.data)) {

link = true;

}

}

//输出

if (link == true) {

System.out.println("此链表为循环链表。");

} else {

System.out.println("此链表不是循环链表。");

}

}

}

*****************************************************

运行结果为:

此链表为循环链表。

关于java链表是否有环和java 链表的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

发布于 2023-04-06 00:04:10
收藏
分享
海报
32
目录

    忘记密码?

    图形验证码

    复制成功
    微信号: cloud7591
    如需了解更多,欢迎添加客服微信咨询。
    我知道了