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;
        
    }
}
相关推荐
2401_891450464 小时前
C++中的职责链模式实战
开发语言·c++·算法
m0_708830964 小时前
C++中的原型模式变体
开发语言·c++·算法
YuTaoShao4 小时前
【LeetCode 每日一题】3602. 十六进制和三十六进制转化——(解法二)手写进制转换
linux·python·leetcode
!停4 小时前
数据结构时间复杂度
c语言·开发语言·算法
AI科技星4 小时前
电磁光速几何耦合常数 Z‘ 的几何起源、第一性原理推导与多维度验证
人工智能·线性代数·算法·矩阵·数据挖掘
每天要多喝水4 小时前
贪心算法专题Day19
算法·贪心算法
Sarvartha4 小时前
图论基础与遍历算法(BFS+DFS)
算法·深度优先
努力学算法的蒟蒻4 小时前
day70(1.29)——leetcode面试经典150
算法·leetcode·面试
冰水不凉4 小时前
cartographer源码阅读三-sensor_bridge
算法
!停4 小时前
数据结构空间复杂度
java·c语言·算法