141. 环形链表

141. 环形链表

leetcode 141. 环形链表


题目:141. 环形链表

给定一个链表,判断链表中是否有环。
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。

示例1:

输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。

示例2:

输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。

示例3:

输入:head = [1], pos = -1
输出:false
解释:链表中没有环。

进阶:
你能用 O(1)(即,常量)内存解决此问题吗?

方法一:双指针(快慢指针)

思路:双指针(快慢指针) ,一个指针每次移动一个节点,一个指针每次移动两个节点,如果存在环,那么这两个指针一定会相遇。

运行数据:执行用时:0 ms,内存消耗:39.7 MB

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// LeetCode指定调用方法
public boolean hasCycle(ListNode head) {

// 当head满足如下条件时,绝不能成环,直接返回false即可
if (head == null || head.next == null || head.next.next == null) {
return false;
}

// 初始化快慢指针
ListNode fast = head;
ListNode slow = head.next;

// 双指针(快慢指针)算法
while (slow != null && slow.next != null) {
if (fast == slow) {
return true;
}
fast = fast.next;
slow = slow.next.next;
}

return false;
}

方法二:标记法

思路:标记法,通过遍历链表,将已遍历的链表结点赋值为Integer.MAX_VALUE,当遍历到链表结点为null时说明链表不成环,当链表结点的值为Integer.MAX_VALUE时说明链表成环。

运行数据:执行用时:0 ms,内存消耗:39.7 MB

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// LeetCode指定调用方法
public boolean hasCycle(ListNode head) {

// 当head满足如下条件时,绝不能成环,直接返回false即可
if (head == null || head.next == null || head.next.next == null) {
return false;
}

// 初始化遍历指针
ListNode node = head;

// 标记算法
while (node != null) {
if (node.val == Integer.MAX_VALUE) {
return true;
}
node.val = Integer.MAX_VALUE;
node = node.next;
}

return false;
}

方法三:hash表

思路:hash表,遍历链表,将遍历结点放入hash表中,当遍历到链表结点为null时说明链表不成环,当链表结点已经在hash表中时说明链表成环。

运行数据:执行用时:5 ms,内存消耗:40.8 MB

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// LeetCode指定调用方法
public boolean hasCycle(ListNode head) {

// 当head满足如下条件时,绝不能成环,直接返回false即可
if (head == null || head.next == null || head.next.next == null) {
return false;
}

// 初始化遍历指针
ListNode node = head;

// 初始化hash表
Set<ListNode> set = new LinkedHashSet<>();

// hash算法
while (node != null) {
if (set.contains(node)) {
return true;
}
set.add(node);
node = node.next;
}

return false;
}

相关链接:**

学习所得,资料、图片部分来源于网络,如有侵权,请联系本人删除。

才疏学浅,若有错误或不当之处,可批评指正,还请见谅!


Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×