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;
        
    }
}
相关推荐
小鸡吃米…16 小时前
机器学习中的随机森林算法
算法·随机森林·机器学习
霁月中16 小时前
[Codeforces Round 1065 (Div. 3)](A-D,F)
算法
世洋Blog16 小时前
算法导论-分治法和合并(Merge)排序
算法
源代码•宸16 小时前
Golang基础语法(go语言结构体、go语言数组与切片、go语言条件句、go语言循环)
开发语言·经验分享·后端·算法·golang·go
l1t16 小时前
快速加载CSV文件到数据库的工具pg_csv_loader
数据库·算法
yugi98783816 小时前
基于Matlab的晴空指数计算实现
开发语言·算法·matlab
ADI_OP17 小时前
ADAU1452的开发教程3:常规音频算法的开发(2)
算法·dsp开发·adi dsp中文资料·adi dsp·adi音频dsp·adi dsp开发教程
666HZ66617 小时前
数据结构1.0 数据结构在学什么
数据结构·算法
君义_noip17 小时前
信息学奥赛一本通 1951:【10NOIP普及组】导弹拦截 | 洛谷 P1158 [NOIP 2010 普及组] 导弹拦截
c++·算法·csp-j·信息学奥赛