当前位置: 首页 > news >正文

判断单链表中是否存在环

1、使用快慢指针

慢指针每次移动一个结点,快指针每次移动两个结点,快指针移动的快,必将先进入环,待慢指针移动进环内,就有点像追及问题了,快指针移动的快,当 p1 == p2 时,就说明快慢指针相遇了,即链表有环。懒得画图,就描述一下算了。。。

bool hasCycle(ListNode *head) {
        if(head == null)
            return false;
        ListNode *p1 = head,*p2=head;
        while(p2!= nullptr && p2->next != nullptr )
        { //  如果p2遇到NULL,则说明链表没有环
            p1 = p1->next;  // 慢指针
            p2 = p2->next->next;  // 块指针
            if(p1 == p2)
            {
                return true;
            }
        }
        return false;
    }

2、利用set容器

bool hasCycle(ListNode *head)
 {
        if(head == nullptr)
            return false;
        set<ListNode*> s;
        while(head)   //  head != nullptr
        {
            if( s.count(head) )
                return true;
           // 如果该节点不在容器,就插入该节点
            s.insert(head);  
            head = head->next;  
        }
        return false;
}

3、使用一个公共结点,遍历结点,使next指向公共结点,后移相关指针,继续遍历,如果此时某个结点的next指向这个公共结点,说明这个结点就是环的入口,即链表有环。

bool hasCycle(ListNode *head)
{
       
        ListNode *temp = new ListNode(0);    //初始化一个节点值为0的空节点;
        if(head == NULL)
            return false;
        while(head){
            if(head->next == temp)  
                return true;
            ListNode *p = head;
            head = head->next;
            p->next = temp;
        }
        return false;
}   

 

相关文章:

  • LeeCode61 旋转链表
  • LeeCode74 搜索二维矩阵
  • (0)Nginx 功能特性
  • (2)nginx 安装、启停
  • (3)nginx 配置(nginx.conf)
  • 汇编语言学习笔记--基础知识篇
  • IAR for 430软件的简单使用
  • 430单片机时钟系统与复位系统的配置(1)
  • 430单片机时钟系统与复位系统的配置(2)
  • STM32F103芯片的一些小知识
  • RCC的一些小知识
  • stm32 SPI学习
  • SPI通信过程以及 STM32的SPI特性构架
  • 通讯的基本概念以及分类
  • STM32通用同步异步收发器(USART)
  • classpath对获取配置文件的影响
  • Django 博客开发教程 8 - 博客文章详情页
  • HTTP 简介
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Linux后台研发超实用命令总结
  • Python打包系统简单入门
  • React16时代,该用什么姿势写 React ?
  • Vue.js源码(2):初探List Rendering
  • Webpack 4 学习01(基础配置)
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • Zsh 开发指南(第十四篇 文件读写)
  • 不上全站https的网站你们就等着被恶心死吧
  • 前端技术周刊 2019-02-11 Serverless
  • 《天龙八部3D》Unity技术方案揭秘
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • # include “ “ 和 # include < >两者的区别
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (2015)JS ES6 必知的十个 特性
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (poj1.2.1)1970(筛选法模拟)
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • **python多态
  • .“空心村”成因分析及解决对策122344
  • .net CHARTING图表控件下载地址
  • .net refrector
  • .net 简单实现MD5
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • @Transient注解
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • [20160807][系统设计的三次迭代]
  • [Android Pro] Notification的使用
  • [Big Data - Kafka] kafka学习笔记:知识点整理