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

环形链表(快慢指针)

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表

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

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

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

 

#include <stdbool.h>struct ListNode {int val;struct ListNode *next;
};bool hasCycle(struct ListNode *head) {if (!head || !head->next) {return false; // 链表为空或只有一个节点,肯定没有环}struct ListNode *slow = head;struct ListNode *fast = head->next;while (slow != fast) {if (!fast || !fast->next) {return false; // 如果快指针或快指针的下一个节点为NULL,说明没有环}slow = slow->next;fast = fast->next->next;}return true; // 如果能跳出循环,说明有环
}

 这里同样使用了快慢指针的方法,注意在C语言中要使用 struct 来定义链表节点。算法思想和Python版本相同,只是语法有所不同。

 如果你想测试上述 C 代码,可以创建一个简单的链表,并手动设置环。以下是一个例子:

#include <stdio.h>
#include <stdbool.h>struct ListNode {int val;struct ListNode *next;
};bool hasCycle(struct ListNode *head);int main() {// 创建链表:1 -> 2 -> 3 -> 4 -> 5 -> 2(与节点3相同,形成环)struct ListNode *head = (struct ListNode *)malloc(sizeof(struct ListNode));head->val = 1;struct ListNode *node2 = (struct ListNode *)malloc(sizeof(struct ListNode));node2->val = 2;head->next = node2;struct ListNode *node3 = (struct ListNode *)malloc(sizeof(struct ListNode));node3->val = 3;node2->next = node3;struct ListNode *node4 = (struct ListNode *)malloc(sizeof(struct ListNode));node4->val = 4;node3->next = node4;struct ListNode *node5 = (struct ListNode *)malloc(sizeof(struct ListNode));node5->val = 5;node4->next = node5;// 设置环node5->next = node2;// 测试是否有环if (hasCycle(head)) {printf("链表中存在环。\n");} else {printf("链表中不存在环。\n");}// 释放节点内存free(head);free(node2);free(node3);free(node4);free(node5);return 0;
}

在这个例子中,我们手动创建了一个包含五个节点的链表,并设置第五个节点指向第二个节点,形成了一个环。当运行程序时,输出应该是 "链表中存在环"。 

 

http://www.lryc.cn/news/293472.html

相关文章:

  • vue day06
  • ffmpeg 输入文件,输入出udp-ts 指定pid、Programid ts流参数
  • 操作系统透视:从历史沿革到现代应用,剖析Linux与网站服务架构
  • 金蝶82新建员工信息维护菜单,并新建导入模板,导入时出现不能在此处导入模板
  • 套你npm镜像
  • [网络安全]IIS---FTP服务器 、serverU详解
  • 校园自助洗浴设施运维服务认证的介绍
  • NetCore iText7 根据PDF模板 导出PDF文件
  • Notion 开源替代品:兼容 Miro 绘图 | 开源日报 No.162
  • LangChain 81 LangGraph 从入门到精通三
  • Python学习从0到1 day13 Python数据容器.4.set集合、dict字典,映射
  • Java生成微信小程序二维码的方式有哪些?
  • 一箭11星,吉利未来出行星座第二个轨道面部署完成!
  • 【持续学习系列(九)】《Continual Learning with Pre-Trained Models: A Survey》
  • redis的AOF
  • TDengine 签约杭州云润,助力某大型水表企业时序数据处理
  • 迷宫(蓝桥杯省赛C/C++)
  • Elastic Search
  • elementUI中el-tree组件单选没有复选框时,选中、current-node-key高亮、刷新后保留展开状态功能的实现
  • Ubuntu上开启FTP服务教程
  • C语言数组指针详解与应用
  • 计算机服务器中了DevicData勒索病毒如何解密,DevicData勒索病毒解密流程
  • 面试150 位1的个数 位运算
  • Mysql的BufferPool
  • 嵌入式中物联网核心技术有哪些
  • C语言入门到精通之练习36:一个最优美的图案(在TC中实现)。
  • 【Nginx】nginx入门
  • 【数据结构】并查集(路径压缩)
  • FreeMark ${r‘原样输出‘} ${r“原样输出“}
  • nginx初学者指南