判断单链表中的元素是否递增_检测单链表中是否有环(C语言)

检测单链表中是否有环(C语言)


方法:双指针法思路
  • 使用两个指针,两个初始时都指向链表的头结点,然后one指针一次加一,另一个two指针一次加二。
  • 在链表有环时,two指针与one指针相等就说明有环。
  • 当one指针到达环的起始位置时,two指针已经在环中,此时,由于是环的结构,相当于two指针在追one指针, 由于每two指针每次比one指针快一, 所以,one只需再走两个指针之间的距离的次数,two指针就可以追上one指针。距离小于环的长度。
  • 最终的循环次数小于等于n,最坏情况为n次。所以,时间复杂度是O(n)。

图解
aebba3f9be01b352ea11758c77f42f87.png

链表中环检测算法图

  • 当one指针进入环的初始点时,two指针可能已经在环循环多次,此时正好在图中的位置。
  • 此时,就可以看成是two指针在追one指针,由于two每次都比比one快1,所以,在图中1的位置可以判断,再经过5次移动,two和one就会处于同一个位置。
  • 演示结果与预期一致。

代码
#include #include //构造结构体typedef struct list{int data;struct list *next;}*List,LNode;//函数声明List init_list(List head);int Detection(List head);void main(){    List head;    head = (LNode*)malloc(sizeof(LNode));    head = init_list(head);    if(Detection(head))        printf("单链表中有环!");    else        printf("单链表中无环!");   }//链表初始化函数List init_list(List head){int i = 1;List p = head;while(i <= 8){List s;s = (LNode*)malloc(sizeof(LNode));s->data = i;s->next = NULL;p->next = s;p = p->next;i++;}    p->next = head->next->next;return head->next;}//双指针检测单链表中是否有环int Detection(List head){    //0为无环,1为有环    List one = head;    if(head->next == NULL)        return 0;    List two = head->next->next;    while(two != NULL)    {        one = one->next;        two = two->next->next;        if(one == two)            return 1;    }    return 0;}

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

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

相关文章

cad 怎么显示块句柄_cad怎么显示工具栏

大家使用电脑时可能会出现一些小问题&#xff0c;比如cad菜单栏不见了&#xff0c;怎样全屏显示等等问题&#xff0c;有时候不小心操作&#xff0c;导致问题的出现&#xff0c;cad怎么显示工具栏?cad怎么显示工具栏方法一、使用天正自带内部命令步骤1、在最下方的【命令栏】中…

Kubernetes集群上的Apache Ignite和Spring第3部分:测试应用程序

在上一个博客中&#xff0c;我们为Ignite应用程序创建了Kubernetes部署文件。 在此博客上&#xff0c;我们将在Kubernetes上部署Ignite应用程序。 我将在此使用minikube。 让我们先构建 mvn clean install 我将创建一个简单的Docker映像&#xff0c;因此需要Dockerfile。 让…

大学计算机应用基础第三版简答题答案,大学计算机应用基础习题答案

第一章计算机基础知识一、填空1、硬件软件2、控制器3、冯诺依曼4、CPU主频5、系统软件应用软件6、数据总线地址总线控制总线7、柱面磁头号扇区8、分辨率9、主键盘区功能键区数字键区编辑键区10、第四代11、微处理器12、外部存储器13、控制器14、操作系统程序设计语言及程序设计…

Java 第16章 坦克大战1-2 思路整理

文章目录 1 绘制坦克坦克画板Panel画框Frame 2 让坦克动起来画板Panel 1 绘制坦克 坦克 不同坦克有共同属性&#xff0c;可以先提取共同特征&#xff08;坐标位置&#xff09;作为父类&#xff0c;然后其他坦克类继承它。 画板Panel 有坦克在画板上显示&#xff0c;所以包含…

java object转泛型_为什么Java的泛型要用擦除实现

在 Java 中的 泛型 &#xff0c;常常被称之为 伪泛型 &#xff0c;究其原因是因为在实际代码的运行中&#xff0c;将实际类型参数的信息擦除掉了 (Type Erasure) 。那是什么原因导致了 Java 做出这种妥协的呢&#xff1f;下面我就带着大家以 Java 语言设计者的角度&#xff0c;…

td 字典表_数据库怎么设计字典表

数据库怎么设计字典表&#xff0c;用来存储类型数据&#xff0c;需要可以编缉&#xff0c;大家都是怎么做的CREATE TABLE t_ci (id bigint(20) NOT NULL AUTO_INCREMENT,parentId bigint(20) DEFAULT NULL,name varchar(32) DEFAULT NULL COMMENT 名称,seq int(11) DEFAULT NUL…

java lambda函数_Java SE 8新功能介绍:使用Lambda Expression进行函数式编程

java lambda函数“ Java SE 8新功能浏览 ”系列的这篇文章将深入了解Lambda表达式 。 我将向您展示Lambda表达式的几种不同用法。 它们都具有功能接口的共同实现。 我将解释编译器如何从代码中推断信息&#xff0c;例如特定类型的变量以及后台实际发生的情况。 在上一篇文章“…

计算机电源稳压,一种用于计算机的电源稳压电路

主权项&#xff1a;1.一种用于计算机的电源稳压电路&#xff0c;其特征在于&#xff1a;包括变压器、桥式整流器、第一电容至第三电容、第一电阻至第五电阻、第一电位器、第二电位器、第一场效应管、第二场效应管、三极管和基准电压源&#xff0c;电压输入的两端分别与所述变压…

python输入代码如何清除_Bug清除手册-代码书写规范与基本使用(Python)

第 0-3 关 &#xf0024; 代码书写规范与基本使用 &#xf0024; Q &#xff1a;代码“” ( 等号 ) 的两边要不要空格&#xff0c;有影响吗&#xff1f; &#xf0021; A &#xff1a;没有影响&#xff0c;要习惯空格&#xff0c;这样更加规范美观&#xff0c;有辨识度&#xf…

Apache Camel 3.1 –更多骆驼核心优化(第2部分)

我以前曾在博客中介绍我们在下一个Camel 3.1版本&#xff08;第1部分&#xff09;中所做的优化 。 今天&#xff0c;我想发布大约4周后的最新状态更新。 我们集中在三个方面优化骆驼核心&#xff1a; 不必要的对象分配 不必要的方法调用 提高绩效 换句话说&#xff0c;我…

计算机系统的指令系统,计算机指令系统指的是什么呢?

2014-12-27计算机系统的指令由你哪两部分组成&#xff1f;共作用分别是什么&#xff1f;1。8086汇编语言指令由标号、操作码、操作数和注释组成,其中标号和注释可以省略&#xff0c;操作码指出指令要过盛的功能,操作数指出完成的对象。2。变量和标号的区别是变量由伪指令定义&a…

echarts怎么保存图片到剪切板上_在电脑上怎么批量给图片编号以及怎么自动记录记事本txt文档时间...

电脑日益成为我们日常办公不可或缺的工具&#xff0c;除了必要的软件使用之外&#xff0c;也有一些直到今天还不那么为人所熟知的小技巧。而小编今天就暂时为大家介绍两个颇为常用的小技巧~分别是如何将图片批量编号以及自动记录记事本时间。技巧一、图片批量编号旅行或者活动结…

计算机类qq网名,最帅的qq名字

qq这个聊天工具已经成为人们电脑里必备的软件&#xff0c;上到40~50的叔叔阿姨&#xff0c;下至8~9岁的小学生&#xff0c;都有qq这个聊天工具。qq是有可以随意改名字的功能&#xff0c;最长可以输入十几个字符作为名字。就是因为取名没有太多的限制&#xff0c;反而让人不知道…

码云上传代码添加标签_第一次使用Git Bash Here 将本地代码上传到码云

当我们安装成功git工具时候&#xff0c;初次使用Git时&#xff0c;需要Git进行配置。1.点击桌面上的这个图标&#xff0c;打开Git Bash&#xff1a;如图所示2.配置自己的用户名和邮箱git config --global user.name "你的名字或昵称"git config --global user.email …

python执行adb命令_Python实现对adb命令封装

我就废话不多说了&#xff0c;大家还是直接看代码吧&#xff01; #!/usr/bin/evn python # -*- coding:utf-8 -*- # FileName adbtools.py # Author: HeyNiu # Created Time: 2016/9/19 """ adb 工具类 """ import os import platform import re…

ubuntu优化服务器网络连接数,ubuntu下解决高并发socket最大连接数限制,tcp默认1024个连接...

linux系统默认ulimit为1024个访问 用户最多可开启的程序数目。一般一个端口(即一个进程)的最高连接为2的16次方65536通过这个命令 ulimit -n 可以看到默认值为1024查看全局文件句柄数限制(系统支持的最大值)cat /proc/sys/fs/file-max查看每个进程文件句柄数限制ulimit -n第一步…

c++中求解非线性方程组_齐次线性方程组的基础解系的简便算法

线性方程组的求解是线性代数中的基本技能&#xff0c;而齐次线性方程组的基础解系的求法又是基础。本文给出一个计算齐次线性方程组的基础解系的公式&#xff0c;从而简化计算过程。01 符号说明 n元线性方程组的矩阵形式&#xff1a;(1)齐次线性方程组;(2)非齐次线性方程组;系数…

在AWS第1部分中使用Terraform自动缩放组:基本步骤

因此&#xff0c;您想使用Terraform在AWS上创建一个自动缩放组。 以下是达到此目的的最少步骤。 在编写实际代码之前&#xff0c;应指定aws terraform提供程序以及provider.tf文件上的区域。 provider "aws" { version "~> 2.0" region "eu-wes…

python的if语句例句_Python入门之if条件语句

Besides the while statement just introduced, Python knows the usual control flow statements known from other languages, with some twists.除了之前介绍的while语句&#xff0c;Python同样支持其他语言通常用的控制流语句&#xff0c;但也有一些区别。 if Statements P…

虚拟空间独立服务器哪个好,共享虚拟主机和独立哪个好

共享虚拟主机和独立哪个好&#xff1f;现在市面上的虚拟主机产品分为共享主机和独立虚拟主机&#xff0c;那对于用户来说&#xff0c;他们二者之间哪个更好些呢。共享虚拟主机共享虚拟主机指多个用户共同平均使用同一台服务器资源&#xff0c;包括CPU、内存、带宽、硬盘和IP都是…