【leetcode】每日精选题详解之141.环状链表

        嗨,大家好,我是袁厨(因为酷爱做饭,所以自己考取了厨师证)。之前一直看大家写的博客,学到了很多东西。然后最近萌生了自己写的想法,将自己知道的分享给需要的同学。以后每天会为大家分享leetcode精选题目的各种题解和Python, JS, JQ, CSS, PHP, JAVA的一些小Demo。请大家关注我,一起交流学习吧。


141. 环形链表

  • 题目描述
  • 暴力解法
    • 做题思路
    • 题目代码
  • HashSet
    • 做题思路
    • 题目代码
  • 快慢指针
    • 做题思路
    • 题目代码
  • 总结

题目描述

【leetcode】每日精选题详解之141.环状链表_第1张图片

【leetcode】每日精选题详解之141.环状链表_第2张图片


暴力解法

做题思路

这个方法有点low,但是也是可以AC的,因为长度不会大于10000,所以当我们大于10000时,肯定是存在环的,如果没有大于10000就输出了说明是没有环的。

题目代码

public class Solution {
     
    public boolean hasCycle(ListNode head) {
     
        int i = 0;
        while(head!=null){
     
            head = head.next;
            i++;
            if(i>10000){
     
                break;
            }
        }
        if(i>10000){
     
            return true;
        }
        return false;        
    }
}

        


HashSet

做题思路

这个思路就是新建一个HashSet,然后将节点存进去,当每次存新节点时看看HashSet里是否含有该节点了,如果含有则证明有环,如果不含有,且遍历完毕,则证明没有环

题目代码

public class Solution {
     
    public boolean hasCycle(ListNode head) {
     
      //创建一个存节点的HashSet表
        HashSet<ListNode> list = new HashSet<ListNode>();
        while(head!=null){
     
        //判断是否存在
            if(list.contains(head)){
     
                return true;
            }else{
     
                list.add(head);
                head=head.next;
            }
        }
        return false;
        
    }
}

快慢指针

做题思路

这个做题方法是比较巧妙的,总的思路就是,快指针在前面跑,慢指针在后面追,但是快指针的速度比慢指针的快,所以遇到环的时候,快指针和慢指针会同时陷进环里,又因为速度不一样,所以他俩必会相遇。

题目代码

public class Solution {
     
    public boolean hasCycle(ListNode head) {
     
        //排除为空和一个节点的情况
        if(head == null || head.next == null){
     
            return false;
        }
        //两个指针的位置
        ListNode pro = head.next;
        ListNode last = head;
        //遍历到最后,这里是需要注意的,当节点长度为2,且没有环的时候需要考虑一下
        while( pro != null && pro.next!=null){
     
               pro=pro.next.next;
               last=last.next;
               if(pro == last){
     
                   return true;
               }
        }
        return false;
        
    }
}

总结

这个题目的快慢指针是一个特别好的解题思路,大家可以试着写一下,我当时在while条件的地方遇到了问题,一直越界,或者考虑不完全的情况。

作者:LeetCode
链接:https://leetcode-cn.com/problems/rotate-array/solution/xuan-zhuan-shu-zu-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(leetcode每日精选,指针,链表,leetcode,算法)