c++环形链表怎么实现
发表于:2024-10-21 作者:千家信息网编辑
千家信息网最后更新 2024年10月21日,这篇文章主要介绍"c++环形链表怎么实现"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"c++环形链表怎么实现"文章能帮助大家解决问题。算法:该类题目的核心点在
千家信息网最后更新 2024年10月21日c++环形链表怎么实现
这篇文章主要介绍"c++环形链表怎么实现"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"c++环形链表怎么实现"文章能帮助大家解决问题。
算法:
该类题目的核心点在于如何判断是环形链表,核心思想是:两个人在环上跑步,跑的快的早晚会追上跑的慢的。
是快慢指针的典型使用场景。
题目1: 环形链表
代码实现:
/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */func hasCycle(head *ListNode) bool { if head == nil || head.Next == nil { return false } slow := head // 慢指针一次走一步 fast := head.Next // 快指针一次走两步 for slow != fast { if slow == nil || fast == nil { return false } slow = slow.Next fast = fast.Next if fast != nil { fast = fast.Next } } return true}
题目2:环路检测
代码实现:
// 算法:该题目主要分两步,第一步是找到环形链表中的相交的位置。
// 第二步是让慢指针指向链表首部,快指针位置不变,
// 然后快慢指针每次都走一步,再次相遇就是环形链表的入口位置。
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func detectCycle(head *ListNode) *ListNode {
s, f := head,head
for f != nil && f.Next != nil {
s = s.Next
f = f.Next.Next
if f == s { // 判断是不是有环
break
}
}
if f == nil || f.Next == nil {
// 此时的快指针在环里面,理论上这两个都不应该为空;
// 只有一个节点的话,f.Next == nil
return nil
}
s = head
for s != f {
s = s.Next
f = f.Next
}
return s
}
关于"c++环形链表怎么实现"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。
环形
指针
题目
c++
位置
知识
两个
代码
快慢
核心
算法
行业
不同
实用
入口
典型
内容
再次
只有
场景
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
ntp时间同步服务器产品说明
信息网络安全专业硕士
电信测速软件开发
网络安全级别设置太
软件开发类论文框架
dns服务器算主机吗
阿里云服务器安全防护云骑士
中山市券鱼网络技术有限公司
数据库 搜索全列
华三服务器开机进安全模式
津门论剑共话网络安全之4
中国陶瓷行业信息数据库
网络安全为什么要带面具
豆瓣链接不上服务器
上市互联网科技企业排行榜
公司的网络服务器是怎么说
软件开发尾款付费时间
squad服务器规定
软件开发桌面秀
阜新学网络技术
上海游戏软件开发良心服务
常德软件开发培训多少钱
长沙开福区学习软件开发培训
5e无法安全在服务器上运行
金山区推广软件开发哪家好
济宁培训网络技术班
国家政务平台服务器异常
江门市天蝎软件开发有限公司
众恒全华网络技术天津有限公司
南京运行智慧工地软件开发