剖解环形链表1

环形链表

思路:我们知道在操场上跑步,若一个人跑的快,另一个人跑得慢,那么就一定会有相遇的那一刻,两人站在同一个位置,所以我们可以分别定义快慢指针,若快指针和慢指针相逢,就说明该链表是环形链表
1.若链表为空或者链表只有一个节点,则不可能有环,即

if ( head == null || head.next==null){

return false;

}

2.若链表有多个节点,此时分别定义快慢指针,即

ListNode fast=head;

ListNode slow=head;

3.在快指针和快指针的next域不为空的情况下,

让快指针每次走两步,慢指针每次走一步,若两指针指向的节点地址相同,则说明成环,即

while(fast!=null && fast.next!=null){

fast=fast.next.next;

slow=slow.next;

if(fast==slow){

return true;

}

}

完整代码如下:

java 复制代码
public boolean hasCycle(ListNode head) {
        if(head==null){
            return false;
        }
        ListNode fast=head;
        ListNode slow=head;
        while(fast!=null && fast.next!=null){
            fast=fast.next.next;
            slow=slow.next;
            if(fast==slow){
                return true;
            }
        }
        return false;
    }
相关推荐
h_a_o777oah21 小时前
【树论】树链剖分:将树形结构转化为线性结构以处理树上路径问题(洛谷 P3384 附C++代码模板)
数据结构·算法·线段树·acm·树链剖分·树论·重链剖分
HEJOO921 小时前
指针的算术运算详解
java·数据结构·算法
Coder-magician1 天前
《代码随想录》刷题打卡day47:并查集-part01
数据结构·算法·图论
垆边人似月.1 天前
VLAN 资源池(100~200 分档)
数据结构·算法
程序员清风1 天前
算法与数据结构入门:复杂度、数组与链表
数据结构·算法·链表
Logic1011 天前
C语言/数据结构排序题解:三个数的最大乘积——排序后比较两种候选情况
c语言·数据结构·数组·排序·时间复杂度·算法题·负数处理
殷色玫瑰1 天前
C++ string类详解:常用接口、字符串操作与模拟实现
java·linux·c语言·开发语言·数据结构·c++
写后端的胖头鱼1 天前
时间复杂度 & 空间复杂度
java·数据结构·算法·时间复杂度·空间复杂度
多弗朗皮卡丘1 天前
数据结构番外:环形队列
数据结构·c
50万马克的面包1 天前
顺序表和链表_精华知识点_CSDN博客
数据结构·链表