功能总览
快速融会贯通
本站把所有常见算法技巧都总结成框架模板,并手把手带你完成 500 道习题,迅速练出肌肉记忆,彻底掌握算法。
配套插件全家桶
Chrome/vscode/Jetbrains 配套插件辅助学习,和网站无缝衔接,享受最丝滑的刷题体验。
算法可视化面板
几乎所有题目的解法都配有交互式动画演示,大幅降低算法学习门槛。
代码图片注释
鼠标移动到代码解法中的小灯泡图片,弹出图片辅助你更好地理解算法。
支持主流编程语言
网站及所有配套插件支持 Java/C++/Python/Golang/JS 等主流编程语言。
文末讨论区
思维碰撞,友好交流,我会定期回答大家的问题,共同进步。
阅读历史
文章列表有小图标标记读过/读完的文章,方便追踪学习进度。
算法可视化
可交互的算法可视化面板,所有题目代码下方都有对应的可视化面板。
🚀 Recursion Visualization Example 🚀
图片注释
对于比较复杂的算法,代码中会包含小灯泡图标,鼠标移动到图标上会弹出对应的图片,辅助理解算法。
网站和所有配套插件均已适配此功能
java 🟢
class Solution {
public ListNode detectCycle(ListNode head) {
ListNode fast, slow;
fast = slow = head;
while (fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
if (fast == slow) break;
}
// 上面的代码类似 hasCycle 函数
if (fast == null || fast.next == null) {
// fast 遇到空指针说明没有环
return null;
}
// 重新指向头结点
slow = head;
// 快慢指针同步前进,相交点就是环起点
while (slow != fast) {
fast = fast.next;
slow = slow.next;
}
return slow;
}
}
cpp 🤖
class Solution {
public:
ListNode *detectCycle(ListNode *head) {
ListNode *fast, *slow;
fast = slow = head;
while (fast != nullptr && fast->next != nullptr) {
fast = fast->next->next;
slow = slow->next;
if (fast == slow) break;
}
// 上面的代码类似 hasCycle 函数
if (fast == nullptr || fast->next == nullptr) {
// fast 遇到空指针说明没有环
return nullptr;
}
// 重新指向头结点
slow = head;
// 快慢指针同步前进,相交点就是环起点
while (slow != fast) {
fast = fast->next;
slow = slow->next;
}
return slow;
}
};
python 🤖
class Solution:
def detectCycle(self, head: ListNode):
fast, slow = head, head
while fast and fast.next:
fast = fast.next.next
slow = slow.next
if fast == slow:
break
# 上面的代码类似 hasCycle 函数
if not fast or not fast.next:
# fast 遇到空指针说明没有环
return None
# 重新指向头结点
slow = head
# 快慢指针同步前进,相交点就是环起点
while slow != fast:
fast = fast.next
slow = slow.next
return slow
go 🤖
func detectCycle(head *ListNode) *ListNode {
fast, slow := head, head
for fast != nil && fast.Next != nil {
fast = fast.Next.Next
slow = slow.Next
if fast == slow {
break
}
}
if fast == nil || fast.Next == nil {
return nil
}
slow = head
for slow != fast {
fast = fast.Next
slow = slow.Next
}
return slow
}
javascript 🤖
var detectCycle = function(head) {
let fast, slow;
fast = slow = head;
while (fast !== null && fast.next !== null) {
fast = fast.next.next;
slow = slow.next;
if (fast == slow) break;
}
// 上面的代码类似 hasCycle 函数
if (fast === null || fast.next === null) {
// fast 遇到空指针说明没有环
return null;
}
// 重新指向头结点
slow = head;
// 快慢指针同步前进,相交点就是环起点
while (slow !== fast) {
fast = fast.next;
slow = slow.next;
}
return slow;
};
vscode 刷题插件
辅助功能和 Chrome 插件类似,方便不喜欢在网页上刷题的同学。
Jetbrains 刷题插件
辅助功能和 Chrome 插件类似,方便不喜欢在网页上刷题的同学。