判断单链表是否有环
思路:循环遍历节点,逐个进行标记,遍历过程中,判断当前Node是否被标记,若已被标记则表示有环。可以用set进行标记,出现重复的node则为有环。
package com.example.demo.controller;
import java.util.*;
public class DingDongTest {
public static void main(String[] args) {
Node node1 = new Node();
node1.setData("1");
Node node2 = new Node();
node2.setData("2");
node1.setNext(node2);
Node node3 = new Node();
node3.setData("3");
node2.setNext(node3);
System.out.println("是否有环: " + isHashCycle(node1));
Node node4 = new Node();
node4.setData("4");
node3.setNext(node4);
node4.setNext(node2);
System.out.println("是否有环: " + isHashCycle(node1));
}
public static boolean isHashCycle(Node head) {
Set<Node> set = new HashSet<>();
while(head!=null) {
if(set.contains(head)) {
return true;
}else {
set.add(head);
head = head.getNext();
}
}
return false;
}
static class Node {
private String data;
private Node next;
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
}