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

环形链表(C++解法)

题目

给你一个链表的头节点 head ,判断链表中是否有环。

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。

如果链表中存在环 ,则返回 true 。 否则,返回 false 。

示例 1:

输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。

示例 2:

输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。

示例 3:

输入:head = [1], pos = -1
输出:false
解释:链表中没有环。

C++代码

#include <iostream>
using namespace std;//创建链表结构体
struct ListNode{int val;struct ListNode* next;
};/*
* 判断环形链表问题
* 使用双指针解决,fast指针走两步,slow指针走一步
* 如果链表呈环状,快慢指针一定会相遇
*/
bool hasCycle(ListNode* head) {ListNode* fast = head;ListNode* slow = head;while (fast->next->next != nullptr) {fast = fast->next->next;slow = slow->next;if (slow == fast) {return true;}}return false;
}int main() {ListNode* node1 = new ListNode{ 3, nullptr };ListNode* node2 = new ListNode{ 2, nullptr };ListNode* node3 = new ListNode{ 0, nullptr };ListNode* node4 = new ListNode{ -4, nullptr };node1->next = node2;node2->next = node3;node3->next = node4;node4->next = node2;ListNode* head = node1;bool ans = hasCycle(head);cout << boolalpha << ans << endl;delete node1;delete node2;delete node3;delete node4;return 0;
}

分析

判断环形链表问题,使用双指针解决,fast指针走两步,slow指针走一步,如果链表呈环状,快慢指针一定会相遇。

问题

第一次遇到链表,学习怎样创建和初始化链表。

相关文章:

  • 京东销量(销额)数据分析:2023年9月京东奶粉行业品牌销售排行榜
  • Linux高性能服务器编程——ch9笔记
  • 空间统计学:快速理解反距离加权法(IDW)
  • 智能水厂运行与调控3D模拟仿真在线展示提高整个系统的协同效应
  • Docker GitLab-Runner安装
  • 【API篇】八、Flink窗口函数
  • CSS读书笔记
  • 解决 /bin/bash^M: bad interpreter: No such file or directory
  • 软考 系统架构设计师系列知识点之设计模式(9)
  • Spring定时任务+webSocket实现定时给指定用户发送消息
  • python和Springboot如何交互?
  • IDEA 断点高阶
  • R2R 的一些小tip
  • 拥有DOM力量的你究竟可以干什么
  • 【计算机网络】认识协议
  • 0基础学习移动端适配
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • JS函数式编程 数组部分风格 ES6版
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • Node 版本管理
  • vuex 笔记整理
  • webpack+react项目初体验——记录我的webpack环境配置
  • 分享一份非常强势的Android面试题
  • 精彩代码 vue.js
  • 类orAPI - 收藏集 - 掘金
  • 区块链技术特点之去中心化特性
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 微信公众号开发小记——5.python微信红包
  • 与 ConTeXt MkIV 官方文档的接驳
  • 终端用户监控:真实用户监控还是模拟监控?
  • python最赚钱的4个方向,你最心动的是哪个?
  • 阿里云API、SDK和CLI应用实践方案
  • ​Linux·i2c驱动架构​
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #if #elif #endif
  • $jQuery 重写Alert样式方法
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (js)循环条件满足时终止循环
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (黑客游戏)HackTheGame1.21 过关攻略
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .Net MVC + EF搭建学生管理系统
  • .net 受管制代码
  • .net 微服务 服务保护 自动重试 Polly
  • .net知识和学习方法系列(二十一)CLR-枚举
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • ??eclipse的安装配置问题!??
  • [ solr入门 ] - 利用solrJ进行检索
  • [20190401]关于semtimedop函数调用.txt
  • [ASP]青辰网络考试管理系统NES X3.5