Skip to content

Commit 3f185cd

Browse files
realDuYuanChaogithub-actions
andauthored
Linked list cycle (examplehub#93)
* linked-list-cycle * Formatted with Google Java Formatter Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com>
1 parent 18032f6 commit 3f185cd

2 files changed

Lines changed: 87 additions & 0 deletions

File tree

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.examplehub.leetcode.easy;
2+
3+
import com.examplehub.leetcode.ListNode;
4+
import java.util.HashSet;
5+
import java.util.Set;
6+
7+
/** https://leetcode.com/problems/linked-list-cycle/ */
8+
public class LinkedListCycle {
9+
public static boolean solution1(ListNode head) {
10+
Set<ListNode> sets = new HashSet<>();
11+
while (head != null) {
12+
if (!sets.add(head)) {
13+
return true;
14+
}
15+
head = head.next;
16+
}
17+
return false;
18+
}
19+
20+
public static boolean solution2(ListNode head) {
21+
if (head == null || head.next == null) {
22+
return false;
23+
}
24+
ListNode slow = head;
25+
ListNode fast = head.next;
26+
while (slow != fast) {
27+
if (fast == null || fast.next == null) {
28+
return false;
29+
}
30+
slow = slow.next;
31+
fast = fast.next.next;
32+
}
33+
return true;
34+
}
35+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.examplehub.leetcode.easy;
2+
3+
import static org.junit.jupiter.api.Assertions.*;
4+
5+
import com.examplehub.leetcode.ListNode;
6+
import org.junit.jupiter.api.Test;
7+
8+
class LinkedListCycleTest {
9+
@Test
10+
void testSolution1() {
11+
ListNode head = new ListNode(3);
12+
ListNode node2 = new ListNode(2);
13+
ListNode node3 = new ListNode(0);
14+
ListNode node4 = new ListNode(4);
15+
head.next = node2;
16+
node2.next = node3;
17+
node3.next = node4;
18+
node4.next = node2;
19+
assertTrue(LinkedListCycle.solution1(head));
20+
21+
head = new ListNode(1);
22+
node2 = new ListNode(2);
23+
head.next = node2;
24+
node2.next = head;
25+
assertTrue(LinkedListCycle.solution1(head));
26+
27+
head = new ListNode(1);
28+
assertFalse(LinkedListCycle.solution1(head));
29+
}
30+
31+
@Test
32+
void testSolution2() {
33+
ListNode head = new ListNode(3);
34+
ListNode node2 = new ListNode(2);
35+
ListNode node3 = new ListNode(0);
36+
ListNode node4 = new ListNode(4);
37+
head.next = node2;
38+
node2.next = node3;
39+
node3.next = node4;
40+
node4.next = node2;
41+
assertTrue(LinkedListCycle.solution2(head));
42+
43+
head = new ListNode(1);
44+
node2 = new ListNode(2);
45+
head.next = node2;
46+
node2.next = head;
47+
assertTrue(LinkedListCycle.solution2(head));
48+
49+
head = new ListNode(1);
50+
assertFalse(LinkedListCycle.solution2(head));
51+
}
52+
}

0 commit comments

Comments
 (0)