LeetCode 141: 环形链表
解题思路:
(1)可以想象成追及问题,用双指针的解法
(2)如果链表中存在环,那么快慢指针终究会相遇;如果链表中不存在环,那么快指针会先指向空
(3)此处采用让快指针每次走两步,慢指针每次只走一步
(4)为了避免出现空指针异常的情况,就要判断快指针走一步时是否为空,对于链表存在环的话,那么无论快指针一次走几步,都不会出现为null的情况
代码部分:
/**
* 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) {
//利用快慢指针,如果存在环那么两指针一定会相遇,如果没有环,则快指针先指向空
ListNode fast, slow;
fast = head;
slow = head;
while(fast != null && fast.next != null){
fast = fast.next.next;
slow = slow.next;
if(fast == slow){
return true;
}
}
return false;
}
}