Java实现链表取中间值和判断链表是否有环问题
package linkList;
/**
* @Author zhw
* Version 1.0
* @Description FastSlowTest
* Date 2021/8/14 12:31
**/
public class FastSlowTest {
//结点类
private static class Node<T> {
//存储数据
T item;
//下一个结点
Node next;
public Node(T item,Node next) {
this.item = item;
this.next = next;
}
}
public static void main(String[] args) {
Node<String> node1=new Node<>("a",null);
Node<String> node2=new Node<>("b",null);
Node<String> node3=new Node<>("c",null);
Node<String> node4=new Node<>("d",null);
Node<String> node5=new Node<>("e",null);
Node<String> node6=new Node<>("f",null);
Node<String> node7=new Node<>("g",null);
//完成节点之间的指向
node1.next=node2;
node2.next=node3;
node3.next=node4;
node4.next=node5;
node5.next=node6;
node6.next=node7;
//产生环
node7.next=node4;
//查找中间值
//String mid = getMid(node1);
// System.out.println("中间值为:"+mid);
// 判断是否有环
boolean circular = isCircular(node1);
System.out.println("是否有环:"+circular);
}
/**
* @Description: 快慢指针查询链表中间值
* @param node node
* @return: java.lang.String
*/
public static String getMid(Node<String> node){
Node<String> fast=node;
Node<String> slow=node;
while (fast!=null&&fast.next!=null){
fast=fast.next.next;
slow=slow.next;
}
return slow.item;
}
/**
* @Description: 判断链表中是否有环
* @param node node
* @return: boolean
*/
public static boolean isCircular(Node<String> node){
Node<String> fast=node;
Node<String> slow=node;
while (fast!=null&&fast.next!=null){
fast=fast.next.next;
slow=slow.next;
if (fast.equals(slow)){
return true;
}
}
return false;
}
}