LeetCode 141.环形链表
大家好,我是灵魂画师--茄子。技术水平一般,喜欢画画。
开始今天的正题。
给定一个链表,判断链表中是否有环。
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。
示例 1:
输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。
示例 2:
输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。
题解:
1.快慢指针解法
思路:
- 设置一个快指针,一个慢指针。
- 同时指向第一个节点。
- 每一次循环,慢指针走一步,快指针走两步。
- 如果快指针追上了慢指针,则代表链表有环,如果没追到快指针指向null则代表无环。
var hasCycle = function(head) {
if (head == null || head.next == null) {
return false;
}
let slow = head;
let quick = head;
while(quick && quick.next){
slow = slow.next;
quick = quick.next.next;
if(slow == quick){
return 1;
}
}
return 0;
};
2.标记法
思路:
- 循环head,每次设置一个flag标记为true,如果再次循环到已经设置好标记的地方,则返回true;
- head每次前进一个节点。
- 如果没有head == null,则返回false。
var hasCycle = function(head) {
while(head){
if(head.flag){
return true;
}
head.flag = true;
head = head.next;
}
return false
};
以上就是我的思路以及解法了,希望大家喜欢我画的图解,我会继续努力的ヾ(◍°∇°◍)ノ゙。(点个赞把我带走吧~~)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。