标签:双指针
力扣: 141. 环形链表
给定一个链表,判断链表中是否有环。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。
如果链表中存在环,则返回 true 。 否则,返回 false 。
import java.util.HashSet;
import java.util.Set;
/**
* @author: 86182
* @description: 141. 环形链表
* 给定一个链表,判断链表中是否有环。
* @date: 2021/4/6 16:59
*/
class Node {
int val;
Node next;
Node(int x) {
val = x;
next = null;
}
}
public class listHasCycle {
public static void main(String[] args) {
Node node1 = new Node(0);
Node node2 = new Node(2);
Node node3 = new Node(3);
Node node4 = new Node(4);
Node node = node3;
node3.next = node2;
node2.next = node1;
node1.next = node4;
node4.next = node2;
//boolean flag = func(node);
boolean flag = func2(node);
System.out.println(flag);
}
private static boolean func2(Node head) {
Set<Node> set = new HashSet<>();
while (head != null){
if(!set.add(head)){
return true;
}
head = head.next;
}
return false;
}
private static boolean func(Node head) {
if(head == null || head.next == null){
return false;
}
Node fast = head;
Node slow = head;
while (fast != null && fast.next != null){
fast = fast.next.next;
slow = slow.next;
if(fast == slow){
return true;
}
}
return false;
}
}