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;     
    }
    

      总结:

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

     



  • 相关阅读:
    BZOJ_2039_[2009国家集训队]employ人员雇佣_ 最小割
    BZOJ_4238_电压_树上差分+dfs树
    BZOJ_4516_[Sdoi2016]生成魔咒_后缀数组+ST表+splay
    BZOJ_3048_[Usaco2013 Jan]Cow Lineup _双指针
    BZOJ_3689_异或之_可持久化Trie+堆
    BZOJ_2006_[NOI2010]超级钢琴_贪心+堆+ST表
    BZOJ_3675_[Apio2014]序列分割_斜率优化
    BZOJ_4518_[Sdoi2016]征途_斜率优化
    BZOJ_1407_[Noi2002]Savage_EXGCD
    [转载]ubuntu常用命令
  • 原文地址:https://www.cnblogs.com/redzzy/p/13277546.html
Copyright © 2011-2022 走看看