zoukankan      html  css  js  c++  java
  • 144环形链表

    题目描述:

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

    为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。

     

    示例 1:

    输入:head = [3,2,0,-4], pos = 1
    输出:true
    解释:链表中有一个环,其尾部连接到第二个节点。


    示例 2:

    输入:head = [1,2], pos = 0
    输出:true
    解释:链表中有一个环,其尾部连接到第一个节点。


    示例 3:

    输入:head = [1], pos = -1
    输出:false
    解释:链表中没有环。

    我的理解:

    有环意味着链表中的一个节点有两个指针同时指向,但是我发现这样想会让问题变得复杂,因为没办法判断同一个节点有两个指针指向
    但是如果用快慢指针来解决这个问题的话,就会容易很多
    一直都只是听快慢指针
    但是看了解析发现他实现起来比较容易
    正确的思想:
    设置两个指针同时指向头结点
    快指针一次走两步,慢指针一次走一步
    如果存在环路,则两个指针一定会相遇
    代码:
    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     struct ListNode *next;
     * };
     */
    bool hasCycle(struct ListNode *head) {
        //有环意味着链表中的一个节点有两个指针同时指向
        //判断节点不如判断指针
        //给两个指针让他同时出发
        struct ListNode *fast=head;
        struct ListNode *slow=head;
        while(fast!=NULL&&fast->next!=NULL)
        {
            slow=slow->next;
            fast=fast->next->next;
            if(fast==slow)
            {
                return true;
            }      
        }
            return false;     
    }
    

      总结:

    巩固了链表的知识,感觉很有收获。起码以后遇到此类题目不会发怵。

     



  • 相关阅读:
    OAuth2.0系列之授权码模式实践教程(二)
    OAuth2.0系列之基本概念和运作流程(一)
    OAuth2.0系列之单点登录SSO实现
    Mybatis系列之设置自动提交事务
    springMVC系列之@Responsebody接口弹出f.txt下载问题
    Oracle应用之批量递增更新数据脚本
    前端 自定义弹出框-提示框(一)
    IE不兼容问题 字符串格式化
    JS 打开本地应用软件
    PPT导出为图片
  • 原文地址:https://www.cnblogs.com/redzzy/p/13277546.html
Copyright © 2011-2022 走看看