链表小结

Super4PCS文章阅读笔记 Super4PCS阅读笔记 Super4PCS阅读笔记 前言 前言 今天给大家分享一下点云配准四点法4PCS0的变种——Super4PCS。此算法的原文在:Super4PCS: Fast Global Pointcloud Registration via Smart Indexing。稍微我也会写一篇关于如何使用这篇文章的里所提供的代码进行点云粗配准。关于四点法... 阅读详情

本章主要内容如下:

* 带头结点的链表反转

* 不带头结点的链表反转

* 链表有环

1、  带头结点的链表反转

思路:遍历每个节点,将其插入到头结点跟第一个节点之间,使其成为新的第一节点,其他的相应后移,即可实现。复杂度O(n)

#include<stdio.h>
#include<stdlib.h>
struct ListNode
{
	int data;
	struct ListNode *next;
};

void Reverse(ListNode *pHead)
{
	ListNode *pCurrent = pHead->next;
	ListNode *pNext = NULL;
	pHead->next = NULL;

	while(pCurrent)
	{
		pNext = pCurrent->next;

		pCurrent->next = pHead->next;
		pHead->next = pCurrent;

		pCurrent = pNext;
	}

}

int main()
{

	ListNode *pList = (ListNode*)malloc(sizeof(ListNode));
	ListNode *pCurrent = pList;
	pCurrent->data = 0xffffffff;

	for(int i=0; i<10; i++)
	{
		ListNode *q =(ListNode*)malloc(sizeof(ListNode));
		q->data = i;
		pCurrent->next = q;
		pCurrent = q;

		printf("%d, ", pCurrent->data);
	}
	printf("\n");
	pCurrent->next = NULL;

	Reverse(pList);

	pCurrent = pList->next;
	while(pCurrent)
	{
		printf("%d, ", pCurrent->data);

		ListNode *p = pCurrent;
		pCurrent = pCurrent->next;

		free(p);
	} 

	free(pList);

	return 0;
}


2、  不带头结点的链表反转

#include<stdio.h>
#include<stdlib.h>
struct ListNode
{
	int data;
	struct ListNode *next;
};

void Reverse(ListNode *&pHead)
{

	ListNode *pCurrent = pHead;
	ListNode *pPrev = NULL;
	ListNode *pNext = NULL;

	while (pCurrent)
	{
		pNext = pCurrent->next;

		pCurrent->next = pPrev;

		pPrev = pCurrent;
		pCurrent = pNext;
	}

	pHead = pPrev;

}



int main()
{

	ListNode *pList = (ListNode*)malloc(sizeof(ListNode));
	ListNode *pCurrent = pList;
	pCurrent->data = 0;

	for(int i=1; i<10; i++)
	{
		ListNode *q =(ListNode*)malloc(sizeof(ListNode));
		q->data = i;
		pCurrent->next = q;
		pCurrent = q;
	}
	pCurrent->next = NULL;
    
	Reverse(pList);

	pCurrent = pList;
	while(pCurrent)
	{
		printf("%d, ", pCurrent->data);

		ListNode *p = pCurrent;
		pCurrent = pCurrent->next;

		free(p);
	} 

	return 0;
}


3、  链表有环

3.1如何判断有环?

方法:快慢指针,采用2个指针不同步数(步数小的每次1步,步数大的每次2步),步数大的如果能够与步数小的相遇则必然存在环。

bool hasCircle(ListNode *pHead)
{
	ListNode *slow = pHead;
	ListNode *fast = pHead;

	while (fast && fast->next)
	{
		slow = slow->next;
		fast = fast->next->next;

		if (slow == fast)
			break;
	}

	return !(fast==NULL || fast->next==NULL);
}

3.2 如何查找环的的入口节点



假设,当二者此一次相遇时,其走过的路程关系是2*(a+b)=a+(b+c)*n+b, 其中n为快指针在环内转的圈数,则a=(b+c)*n-b.

这样,一个指针从头开始,另一个指针从相遇点开始,步长为1进行移动,二者的相遇点即是环的入口点

ListNode *findCircleIn(ListNode *pHead)
{
	ListNode *slow = pHead;
	ListNode *fast = pHead;

	while (fast && fast->next)
	{
		slow = slow->next;
		fast = fast->next->next;

		if (slow == fast)
			break;
	}

	  if (fast == NULL || fast->next == NULL)        
		  return NULL;     

	  slow = pHead;     
	  while (slow != fast)     
	  {          
		  slow = slow->next;          
		  fast = fast->next;     
	  }     

	  return slow; 
}

3.3 计算环的长度

找到环的入口节点后,从入口节点遍历,再次回到入口节点,即可计算出环的长度

int findCircleIn(ListNode *pHead)
{
	ListNode *slow = pHead;
	ListNode *fast = pHead;

	while (fast && fast->next)
	{
		slow = slow->next;
		fast = fast->next->next;

		if (slow == fast)
			break;
	}

	if (fast == NULL || fast->next == NULL)        
	  return 0;     

	slow = pHead;     
	while (slow != fast)     
	{          
	  slow = slow->next;          
	  fast = fast->next;     
	}     

	ListNode *p = slow->next;
	int length = 1;
	while (p != slow)
	{
	  length++;
	  p = p->next;
	}

	return length; 
}

4、两个单链表是否相交

http://blog.163.com/bbluesnow@126/blog/static/27784545201251051156817/



车载以太网SOMEIP入门必看:从服务发现到事件订阅,一次搞懂三种核心通信模式(附报文实例) 本文深入解析车载以太网SOME/IP的三种核心通信模式:服务发现、方法调用和事件订阅,通过真实报文实例和仿真工具演示,帮助开发者快速掌握这一关键技术。文章特别强调服务发现机制的基础作用,并详细介绍了Request/Response与Fire&Forget两种方法调用模式的应用场景,为智能汽车网络通信开发提供实用指南。 阅读详情

相关推荐

跨模型的 API 调用与集成:使用 Spring AI 构建可移植的 API 代码,支持多个 AI 模型(如 OpenAI、Anthropic 等)的调用

Spring AI 是 Spring 生态系统中的一部分,旨在提供一种简单、可扩展的方式来集成人工智能模型。Spring AI 使得开发者可以使用现有的 Spring 体系结构方便地访问多种 AI 模型和服务,例如 OpenAI、Anthropic、HuggingFace 等。

秋元的博客 2405

链表基础知识总结

什么是链表 链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点都包括两部分:一是数据域,用来存储元素数值数据,另一个是存储直接后继结点地址的指针域,该指针一般称为next,用来指向下一个结点的位置。由于下一个结点也是链表类型,所以next的指针也要定义为链表类型。 链表中的一些基本定义和特点 头指针:是指向链表中第一个结点的指针 首元结点:是指链表中存储的第一个数据元素的结

闲适_ 1万+

ESP32-S3数字麦克风入门:手把手教你用Arduino IDE读取MSM261S4030H0R的I2S数据

本文详细介绍了如何使用Arduino IDE读取MSM261S4030H0R数字麦克风的I2S数据,涵盖硬件连接、代码编写和数据可视化全流程。重点解决I2S引脚配置、环境噪声过滤和声波观察等实际问题,适合ESP32-S3开发者快速上手数字麦克风应用。

weixin_26742753的博客 318

链表的总结

1.链表是个好东西 链表概念:数据结构 数据存放(集合)的思想 就像串星星 数组 特点 元素地址是连续的 缺点:增 删 改 查(链表可以解决) #include <stdio.h> #include <stdlib.h> /* 链表概念:数据结构 数据存放(集合)的思想 就像串星星 数组 特点 元素地址是连续的 缺点:增 删 改 查(链表可以解决) */ struct Test { int data; struct Test *next; }; int ...

qq_53550531的博客 2693

2023-12-26~2025-07-04备份

一、海康视觉与汇川机器人 服务器-客户端通信设置IP在同一网段名称IP端口类型海康相机工控机7930服务器机器人3000客户端海康VM服务器设置1通信管理 增添TCP服务端,设置本机IP:192.168.0.20,端口号79302 协议解析 通信双方约定通信格式(设置收发数据格式,分隔符)机器人客户端设置(不同类型机器人设置有差别)1 通讯服务设置 设置连接服务器IP、服务端端口号、机器人端口号,确保连接正常2 协议解析 使用指令代码构建通讯解析。

青铜小码农 3126

统信UOS V20 安装mysql5.7.42详细教程

到bin/下,执行下面的命令,初始化mysql服务信息,得到数据库的初始密码,实际如果目录不一样记得换成自己的目录。下载后通过远程将安装包上传至服务器,我这里将安装包上传至/usr/local/mysql 下。ps:这时候如果还是不能远程访问的话,可能是防火墙的原因,命令行执行以下命令即可。再次登录,发现缺少 libtinfo.so.5文件,再次建立软连接。登录,发现报错,提示缺少libncurses.so.5文件,使用。创建 /var/lib/ 下mysql目录。登录成功,修改密码,设置远程访问。

为谁伫立在风中 1万+

链表知识点总结

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。每一个结构均含有元素和指向该元素后继结构的指针。

Lookdrama的博客 1408

【OpenBMC 系列】4.启动流程 使用qume模拟ast2600-evb

1.安装openbmc适配的qume 2.启动bmc 3.使用bmc web

AiFool的博客 4461

数据结构之链表小结

1.做题考虑全面,空输入,只有一个输入,只有两个输入,相邻的情况,头的情况,末尾的情况!要全面!全面!2.擅长分类讨论并且在讨论的时候归纳出共同点再动手会简单很多,代码也会好写、好看很多。3.单向链表想要从后往前操作有两种方法:递归和栈4.malloc申请的空间及时用free释放,否则容易内存泄漏5.指针始终是指向空间的,多个指针也只是指向的同一个共享空间typedef struct node{ ...

c_living的博客 744

人工智能训练师三级考试备考全攻略|报名条件+真题+补贴申领一站式通关(2026版)

本专栏是人工智能训练师三级考证最完整的备考指南,共77篇文章,覆盖从职业认知、报名实操、AI基础知识、数据标注、模型训练测试部署、考前冲刺到考后进阶的全链路。本导读按模块整理了全部文章链接,帮你快速定位所需内容。人工智能训练师是国家认定的正式职业,证书可在osta.mohrss.gov.cn查询,三级证书可申领最高3120元技能补贴。

白话机器学习 1810

新系统申请软件著作权详细操作说明

今年八月底版权中心系统升级,新系统相对好用一些,至少不用再拿IE访问了,但是多了一项实名认证。下面介绍新系统的操作流程。 目录注册、登录和实名认证注册登录实名认证软件登记申请申请表填写鉴别材料身份证明文件权利归属证明文件其他材料提交材料变更登记 注册、登录和实名认证 首先访问版权中心系统:https://register.ccopyright.com.cn/login.html,如果老系统有账号直接登录即可,没有的话需要注册。 注册 点击注册按钮进入注册。 根据实际情况选择个人或单位,每个个人或单位只能在

Programming Talk 1万+

16.单链表小结

qq_41627390的博客 186

YOLOv12改进策略【损失函数篇】| 替换Powerful-IoU(PIoU),增强对中等质量锚框的关注力,引导锚框更直接、高效地回归

本文针对现有基于IoU的损失函数在目标检测任务中存在的问题,提出了利用Powerful-IoU(PIoU)及其升级版PIoU v2改进YOLOv12的损失函数,以提高模型精度。文章详细介绍了PIoU和PIoU v2的结构原理,并提供了在YOLOv12中实现这些损失函数的具体步骤和代码修改方法。

Limiiiing的博客 931

数据结构--链表学习小结

数据结构链表学习小结 学习内容: 链表 是一种数据结构,在内存中通过 结点记录内存地址 而相互链接形成一条链的储存方式。相比数组而言,链表在内存中不需要连续的区域,只需要每一个结点都能够 记录下一个结点 的 内存地址 ,通过 引用 进行查找,这样的特点也就造就了 链表 增删操作时间消耗很小,而查找遍历时间消耗很大的特点。 单链表: 一般单链表有以下几种方法: append 在链表尾部添加一个元素...

qq_44392254的博客 543

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

xsl判断节点存在_单链表节点的删除与小结

从单链表删除节点的思路1>我们找到需要删除的这个节点的前一个节点2>temp.next = temp.next.next3>被删除的节点,将不会有其他的指向,会被垃圾回收机制回收代码实现//删除节点 //我们在比较时是temp.next.no和需要删除的节点比较 public void del(int no) { HeroNode temp = head; boole...

weixin_39786617的博客 135

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【链表小结】

链表(Linked List)是一种动态数据结构,由一系列的节点(Node)按顺序连接而成,每个节点包含数据域和指向下一个节点的指针(或引用)。链表通过指针将节点连接成一个有序的序列。链表的基本组成部分包括和,这些概念有助于理解链表的结构和操作。

严文文 Chris 1557

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

链表的小结

最近新学的关于链表的操作,做了一个小小的总结吧,链表的一些简单操作。 文笔比较拙略,望高手谅解,指正。 代码均已经在dev上测试运行,保证无错。 如果有和我一样的新手大家可以一起交流一下。#include <stdio.h> #include <stdlib.h> struct test { int a; struct test *next; }; struct test *C

No_red的博客 746

DAY67:数组、链表、字符串、哈希表的刷题小结

找到环的入口位置,也就是在相遇节点处,定义一个指针index1,在头结点处定一个指针index2。原地移除数组上的元素,数组上的元素,不能真正的删除,因此只能覆盖。pre和cur一前一后,先将cur-next保存好,然后将pre连接到cur-next上,将pre箱右移动,cur向右移动。设计快慢指针,low走一步和fast走两步,如果两个指针相遇了,说明链表有环,不然快指针会一直比慢指针快。这题的hash表,是以数组实现的,因为字母只有26个,所以只需要26个数字的数组。设计一个节点来保存当节点的下一个。

weixin_43799497的博客 1056

链表 小结

                                链表 小结 一 .介绍 链表与集合框架里的队列以及数组不同,它是一种非连续 ,非顺序的存储结构,而且其储存的数据元素是通过链表中的引用链接次序实现的.链表是由一系列结点组成的,结点的生成与队列相同,可以在运行时动态生成. 每个结点包括两个部分:一个是储存数据元素的数据域;另一部分则是用来储存下一个结点地址的指针域.正因为如此,链...

Running 159

链表-算法小结

如果要删除倒数第n个节点,让fast移动n+1步,然后让fast和slow同时移动,直到fast指向链表末尾。为什么是n+1呢,因为只有这样同时移动的时候slow才能指向删除节点的上一个节点(方便做删除操作)让index1和index2同时移动,每次移动一个节点, 那么他们相遇的地方就是 环形入口的节点。在相遇节点处,定义一个指针index1,在头结点处定一个指针index2。3.需要确保在删除节点后立即更新指针,避免悬空指针的使用。,这样原链表的所有节点就都可以按照统一的方式进行移除。

2301_80542755的博客 924

C++链表小结

链表

mxh3600的博客 1014

关于十字链表的小结

十字链表

fwq的博客 832
上一篇: 最长对称子串
下一篇: 一道笔试题
traceorigin
博客等级 码龄15年 38粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值