【141-Linked List Cycle(单链表中有环)】
【LeetCode-面试算法经典-Java实现】【所有题目目录索引】
原题
Given a linked list, determine if it has a cycle in it.
Follow up:
Can you solve it without using extra space?
题目大意
给定一个单链表,判断链表是否有环。
解题思路
设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇
代码实现
结点类
class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
算法实现类
public class Solution {
// 设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,
// 如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。
// (当然,fast先行头到尾部为NULL,则为无环链表)程序如下:
public boolean hasCycle(ListNode head) {
ListNode fast = head;
ListNode slow = head;
while (fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
if (slow == fast) {
break;
}
}
return !(fast == null || fast.next == null);
}
}
评测结果
点击图片,鼠标不释放,拖动一段位置,释放后在新的窗口中查看完整图片。