LeetCode 环形链表+升级版环形链表

判断链表是否为环形链表
这道题我采用 哈希表的形式,注意哈希表的一个特点是如果元素已经存在则不能添加,见http://Java 数组与集合(List, Set, Map)获取长度与遍历操作
最初我采用动态数组的方式有些测试用例过不去,利用哈希表这个特性可以使用

java 复制代码
/**
 * 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) {

       Set<ListNode> visitnode=new HashSet<ListNode>();  //哈希表存储访问过的结点
       while(head!=null){
            if(!visitnode.add(head)){
                return true;  //如果添加结点失败,就说明结点之前已经存在
            }
            
            head=head.next;
       }
       return false;
        
    }
}
环形链表Ⅱ:注意不允许修改链表,因此可以声明一个结点:
java 复制代码
/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode detectCycle(ListNode head) {
        Set<ListNode> visitnode=new HashSet<ListNode>();
        ListNode p=head;
        int flag=-1;
        while(p!=null){
            if(!visitnode.add(p)){
                return p;
            }

            p=p.next;
            flag++;

        }
        return null;
        
    }
}
相关推荐
晚风叙码9 小时前
Linux 进程概念(下):程序地址空间与虚拟内存
linux·服务器·算法
silvamux_9 小时前
微头条爆款体平台适配实测:把交付要求变成可计算的指标
java·线性代数·算法·决策树·矩阵
重生之小比特10 小时前
【算法拾光】前缀和|连续的子数组和 + 和相同的二元子数组
算法·leetcode·哈希算法
Pniubi10 小时前
力扣 102二叉树的层序遍历(广度优先搜索)
leetcode·宽度优先
一去不复返的通信er10 小时前
力扣15:盛最多水的容器
算法·leetcode
Navigator_Z10 小时前
LeetCode //C - 1309. Decrypt String from Alphabet to Integer Mapping
c语言·算法·leetcode
潇湘秦10 小时前
SQL Server 2016+ 整数类型元数据扩宽(秒级变更)完整说明
数据库·算法
小白起 v10 小时前
02-数组与链表
数据结构·链表
文丑颜不良啊10 小时前
LeetCode1281~1300题目解析
java·leetcode
Figo_Cheung11 小时前
Figo基于结构空间算法假设(SSAH)的生成式大模型优化范式与工程实现边界研究——提出适应AGI架构演化的自适应拓扑感知表征机制
算法·架构·agi