文章目录
环形链表(附链接)
https://leetcode.cn/problems/linked-list-cycle/description/
一、题目描述


二、思路
把环形链表类比成一个环形跑道,一个人跑的快,另外一个人跑的慢,只要是环形的,他们总会相遇,但如果不是环形的,是一条直线跑道,他们就不会相遇。所以这道题我们可以类比跑道来做,定义两个指针,一个快指针,每次跑两步,一个慢指针,每次跑一步,如果有环他们总会相遇。
三、关键点
- 处理好一个节点和没有节点的情况
- 处理好空指针异常
四、代码(Java / 你常用语言)
java
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public boolean hasCycle(ListNode head) {
//链表为空或只有一个节点
if (head == null || head.next == null) {
return false;
}
//定义两个指针
ListNode fast = head.next;
ListNode slow = head;
//当两个指针没有相遇的时候
while (slow != fast) {
//
if (fast == null || fast.next == null) {
return false;
}
slow = slow.next;
fast = fast.next.next;
}
return true;
}
}
五、总结
- 这题属于什么类型?
属于双指针类型 - 学到了什么套路?
巧妙的利用快慢指针来解题