链表中是否有环【c语言】

news2024/11/25 7:14:52

定义两个指针,一个每次跳跃两个节点(快指针),另一个每次跳跃一个节点(慢指针)。如果存在环,他们最终会在环中的某个点相遇。如果链表无环,快指针将先到达链表尾端。

#include <stdio.h>
#include <stdlib.h>

typedef struct Node {
	int data;
	struct Node* next;
} Node, *LinkedList;

// 创建一个新节点
Node* createNode(int data) {
	Node* newNode = (Node*)malloc(sizeof(Node));
	if (newNode == NULL) {
		printf("Error! Unable to create a new node.\n");
		exit(0);
	}
	newNode->data = data;
	newNode->next = NULL;
	return newNode;
}

// 在链表末尾添加新节点
void append(LinkedList* head, int data) {
	if (*head == NULL) {
		*head = createNode(data);
	}
	else {
		Node* lastNode = *head;
		while (lastNode->next != NULL) {
			lastNode = lastNode->next;
		}
		lastNode->next = createNode(data);
	}
}

// 释放链表内存
void freeList(Node* head)
{
	
}

int hasCycle(Node* head)
{
	if (head->next == NULL)
	{
		return 0;
	}
	Node* slow = head;  //慢指针
	Node* fast = head;  //快指针

	while (fast != NULL && fast->next != NULL)
	{
		fast = fast->next->next;  //快指针每次移动两步
		slow = slow->next;        //慢指针每次移动一步
		if (fast == slow)         //如果快慢指针相遇,说明有环。
		{
			return 1;
		}
	}
	return 0;
}

int main() {
	// 创建节点
	Node* head = createNode(1);
	Node* node2 = createNode(2);
	Node* node3 = createNode(3);
	Node* node4 = createNode(4);
	Node* node5 = createNode(5);
	//1->2->3->4
    //      \  /
    //       5
	// 构建环形链表
	head->next = node2;
	node2->next = node3;
	node3->next = node4;
	node4->next = node5;
	node5->next = node3; // 形成环

	if (1 == hasCycle(head))
	{
		printf("链表有环.\n");
	}
	else
	{
		printf("链表没有环.\n");
	}

	// 释放链表内存
	//freeList(head);
	system("pause");
	return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1591436.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【智能算法】教与学优化算法 (TLBO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2012年&#xff0c;RV Rao等人受到班级内教师教学和学生学习启发&#xff0c;提出了教与学优化算法&#xff08;Teaching-learning-based Optimization, TLBO&#xff09;。 2.算法原理 2.1算法思…

2024最方便申请SSL证书方法介绍

申请SSL证书其实就像你去官方机构办个身份证&#xff0c;证明你的网站是合法且安全的。这里给你白话一点的简单步骤&#xff1a; 步骤一&#xff1a;确定需求 1. 域名&#xff1a;确保你有一个要申请证书的域名&#xff0c;就是你的网站地址&#xff0c;比如 www.example.com。…

【C++算法模板】数论:欧拉筛,线性查找质数的算法

文章目录 1&#xff09;传统找质数的方法&#xff08;优化筛选次数&#xff09;2&#xff09;欧拉筛 1&#xff09;传统找质数的方法&#xff08;优化筛选次数&#xff09; bool isPrime(int num) {for(int i2;i<sqrt(num)) {if(num%i0)return false;}return true; }如果要…

SSL、TLS和HTTPS:网络安全的重要基石

随着互联网的快速发展&#xff0c;网络安全问题日益凸显。为了保护数据在传输过程中的安全&#xff0c;各种加密协议和技术应运而生。SSL&#xff08;安全套接层&#xff09;、TLS&#xff08;传输层安全&#xff09;和HTTPS&#xff08;超文本传输安全协议&#xff09;是三个最…

Git 解决分支冲突

一、前言 一直习惯于 add commit push 的三步走&#xff0c;偶然间看到了一个评论说在 push 之前还有一个 pull&#xff0c;小小的疑问就埋在了我的心里。于是我就先了解了 pull 的工作原理&#xff0c;就是先拉取代码&#xff08;fetch&#xff09;再合并分支&#xff08;mer…

Xilinx Zynq UltraScale+ MPSoC无人机控制器

官方术语是无人驾驶飞行器&#xff08;UAV&#xff09;&#xff0c;这显然有点拗口&#xff0c;所以我们更喜欢说无人机。在过去的几十年里&#xff0c;无人机技术有了巨大的进步。我们为一个客户开发了一个无人机的飞行和视频控制器。 客户挑战 客户需要一种混合FPGA/CPU硬件&…

【matlab下的双目内窥镜标定与深度测距-双目成像原理】

【matlab下的双目内窥镜标定与深度测距-双目成像原理】 这里是目录 介绍坐标系关系相互关系推导三角测量 介绍 双目成像是一种利用两个摄像头或摄像头组成的系统同时捕捉场景信息的技术。它模拟了人类双眼视觉系统&#xff0c;通过两个视角获取的图像来计算深度信息&#xff…

基于分布式鲁棒性的多微网电氢混合储能容量优化配置——1

Optimal configuration of multi microgrid electric hydrogen hybrid energy storage capacity based on distributed robustness A B S T R A C T 储能与微电网相结合是解决分布式风能、太阳能资源不确定性、降低其对大电网安全稳定影响的重要技术路径。随着分布式风电和太阳…

【Hello算法】 > 第 2 关 >数据结构 之 数组与链表

数据结构 之 数组与链表 1&#xff1a;Understanding data structures &#xff01;——了解数据结构——1.1&#xff1a;Classification-分类-1.2&#xff1a;Type-类型- 2&#xff1a;Arrays are the bricks that make up the wall of data structures *——数组是组成数据结…

软件开发有那些陷阱?如何避坑?

引言 在当今数字化时代&#xff0c;软件开发已成为推动科技进步和商业发展的重要引擎。然而&#xff0c;软件开发并非一帆风顺&#xff0c;其中蕴藏着许多陷阱和挑战。如何避免这些陷阱&#xff0c;提高软件开发的效率和质量&#xff0c;成为开发者们面临的重要问题 本文将深入…

UltraScale 架构 SelectIO 资源之IODELAY与IOSERDES仿真与使用

平台&#xff1a;vivado2018.3 具体内容见ug571-ultrascale-selectio IDELAYE3 在调试超高速信号的时候&#xff0c;需要使用iodelayiserdes来调试校准输入信号。例如外部某ADC采样率为5GHZ&#xff0c;外部ADC使用2.5GHZ的时钟去采集输入信号。为了实现采集&#xff0c;adc芯…

【python】python基于Pygame扫雷游戏设计实现(源码+报告)【独一无二】

> &#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博…

AD7685BRMZRL7 16位 2.3V 低功耗模数转换器芯片 ADI

AD7685BRMZRL7是一款由ADI&#xff08;亚德诺&#xff09;公司生产的模数转换器&#xff08;ADC&#xff09;芯片。该芯片的主要功能是将模拟信号转换为数字信号&#xff0c;以便在数字系统中处理. AD7685BRMZRL7 规格信息&#xff1a; 制造商:Analog Devices Inc. 产品种类:模…

volatile是如何禁止指令进行重排序的

Further Reading &#xff1a; 内存屏障类型介绍&#xff08;StoreStore&#xff0c;StoreLoad&#xff0c;LoadLoad&#xff0c;LoadStore&#xff09; Further Reading &#xff1a; 什么是指令重排 重排序分为编译器重排序和处理器重排序。 为了实现volatile内存语义&#x…

本地开发nginx代理服务器(2024-04-10)

1、nginx 解释 nginx 是一个高性能的HTTP和反向代理服务器&#xff0c;同时也是一个IMAP/POP3/SMTP 代理服务器。 在性能上&#xff0c;Nginx占用很少的系统资源&#xff0c;能支持更多的并发连接&#xff0c;达到更高的访问效率&#xff1b; 在功能上&#xff0c;Nginx是优…

展厅装修设计中合理的使用颜色

一、选择合适的主题是最重要的一点 一个引人注目的主题可以立即吸引到游客的注意力&#xff0c;成功的将展厅的主题和产品联系在一起。这个主题应该是与你的产品或服务密切相关的&#xff0c;同时又足够具有吸引力&#xff0c;以吸引消费者对你的展厅产生好奇心。 二、合理的使…

武汉星起航领航跨境电商风潮,一站式服务赋能创业者翱翔

在全球化浪潮的推动下&#xff0c;跨境电商行业如日中天&#xff0c;成为外贸领域的新宠。众多企业纷纷涉足这一领域&#xff0c;寻求新的增长点。然而&#xff0c;在这个竞争激烈的市场中&#xff0c;武汉星起航电子商务有限公司以其独特的服务理念和一站式解决方案&#xff0…

Windows系统本地部署Jupyter Notebook并实现公网访问编辑笔记

文章目录 1.前言2.Jupyter Notebook的安装2.1 Jupyter Notebook下载安装2.2 Jupyter Notebook的配置2.3 Cpolar下载安装 3.Cpolar端口设置3.1 Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 在数据分析工作中&#xff0c;使用最多的无疑就是各种函数、图表、…

正向代理是什么?为什么要使用它?

在跨境行业中&#xff0c;会有跨境用户会询问到一个词&#xff1a;正向代理&#xff1b;正向代理是什么意思&#xff0c;它又有什么作用&#xff0c;为什么要使用它呢&#xff1f;为大家来解答。 正向代理是一种网络架构模式&#xff0c;它位于客户端和互联网之间&#xff0c;…

DedeCMS 未授权远程命令执行漏洞分析

dedecms介绍 DedeCMS是国内专业的PHP网站内容管理系统-织梦内容管理系统&#xff0c;采用XML名字空间风格核心模板&#xff1a;模板全部使用文件形式保存&#xff0c;对用户设计模板、网站升级转移均提供很大的便利&#xff0c;健壮的模板标签为站长DIY自己的网站提供了强有力…