zoukankan      html  css  js  c++  java
  • LeetCode141-环形链表检测

    题目

    给定一个链表,判断链表中是否有环。

    如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。

    如果链表中存在环,则返回 true 。 否则,返回 false 。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/linked-list-cycle
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    思路

    其实就是检测一个链表是不是唤醒链表,是的话返回true否则返回false。

    快慢指针实现,快指针一次走两步,慢指针一次走一步。
    如果是环形链表,两个指针最后一定可以相遇,如果不是的话就无法相遇,返回false。时间复杂度是O(n),空间复杂度是O(1)。

    第二种思路可以将链表中走过的节点都保存到hash表中,最后如果有重复的元素就代表是环形链表。

    代码实现

    /**
     * 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){
                return false;
            }
            ListNode first = head;
            ListNode second = head.next;
            while(second!=null&&second.next!=null){
                if(first==second){
                    return true;
                }
                first = first.next;
                second = second.next.next;
            }
            return false;
        
        }
    }
    
  • 相关阅读:
    同一账号在不同浏览器不能同时登录
    子页面像父页面传递参数--数组
    bootstaptable动态合并单元格和jxls动态合并单元格
    RedisTemplate的使用
    java项目中读取配置文件
    httpclient调用接口
    drop、truncate和delete的区别
    函数式编程
    常见配置redis.conf介绍
    mysql和redis加入到windows服务
  • 原文地址:https://www.cnblogs.com/itjiangpo/p/14181319.html
Copyright © 2011-2022 走看看