博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
判断链表是否存在环 Linked List Cycle
阅读量:6202 次
发布时间:2019-06-21

本文共 936 字,大约阅读时间需要 3 分钟。

hot3.png

问题:

Given a linked list, determine if it has a cycle in it.

Follow up:

Can you solve it without using extra space?

解决:

① 采用快慢指针,fast每次前进2步,slow每次前进1步,若两者相遇,则说明存在环。若fast指向null或者fast的下一个是null,就说明没有环。

/**

 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */

public boolean hasCycle(ListNode head) {

    if (head == null || head.next == null) {
        return false;
    }
    ListNode slow = head;
    ListNode fast = head.next;
    while (slow != fast) {
        if (fast == null || fast.next == null) {
            return false;
        }
        slow = slow.next;
        fast = fast.next.next;
    }
    return true;
}

② 使用hash set存储已经遍历过的节点,若有重复,说明存在环,否则不存在。

public boolean hasCycle(ListNode head) {

    Set<ListNode> nodesSeen = new HashSet<>();
    while (head != null) {
        if (nodesSeen.contains(head)) {
            return true;
        } else {
            nodesSeen.add(head);
        }
        head = head.next;
    }
    return false;
}

转载于:https://my.oschina.net/liyurong/blog/993935

你可能感兴趣的文章
mysql的安装,关于/etc/init.d/下没有mysqld的命令,及php与mysql的连接测试
查看>>
centos 使用 pwgen 生成高强度密码
查看>>
Openstack Nova 二次开发之Nova-extend服务实现
查看>>
centos6.8 x64安装keepalived-1.3.5+lvs
查看>>
Linux自学笔记——用户和组管理
查看>>
BlockChange | 这些热门案例让你一下子搞懂区块链!
查看>>
玩转树莓派——在树莓派上运行Windows 3.2
查看>>
[PaPaPa][需求说明书][V1.0]
查看>>
CISCO 交换设备IOS 备份/恢复操作
查看>>
Linux应用总结(1):自动删除n天前日志
查看>>
GTID的复制的搭建过程
查看>>
网络故障分析
查看>>
QTP自动例子的源码分析--ClearMainWindow
查看>>
HP EVA8400删除VDISK后数据恢复过程分步整理
查看>>
find命令、文件名后缀
查看>>
OOM-KILLer的演进与新的启发式策略
查看>>
JAVA常见算法题(三十一)---冒泡排序
查看>>
JSON相关
查看>>
Mysql启报错报The server quit without updating PID file
查看>>
使用CleanIISLog清除IIS记录
查看>>