链表与交换相关算法题|数值与后继节点交换|两两交换节点|交换当前节点与后继节点(C)

手把手教你用HI3516CV610搭建智能安防摄像头(附完整开发资料) 本文详细介绍了基于海思HI3516CV610 SOC搭建智能安防摄像头的完整开发流程,包括硬件选型、系统架构设计、开发环境搭建、智能分析功能开发及系统调优。通过实战案例,展示了如何利用内置NPU实现人形检测和异常行为分析,并提供了量产测试方案,帮助开发者快速完成智能摄像头项目。 阅读详情

数值与后继节点交换

设有一个由正整数组成的无序单链表,编写完成下列功能的算法

  1. 找出最小值节点,打印改值
  2. 若该数值是奇数,将其与直接后继节点的数值交换
  3. 若该数值是偶数,将其直接后继节点删除
算法思想

遍历整个链表查找最小值节点,从第一个节点开始找
判断数据域的值是否是奇数,若是,与后继节点的值交换
若是偶数,删除后继节点
![[Pasted image 20241112190102.png]]

cur和MIn指针都指向L的next
cur开始遍历,如果cur的next也就是待比较的节点比Min小,将Min指向cur的next
![[Pasted image 20241112190154.png]]

直到cur的next为NULL结束
如果Min的data是奇数,如果后继节点不为NULL,与后继节点交换数值
如果Min的data是偶数,如果后继节点不为NULL,
创建指针del指向Min的next
![[Pasted image 20241112190548.png]]

将Min的next指向del的next,这里是NULL
![[Pasted image 20241112190920.png]]

最后free掉del
![[Pasted image 20241112190941.png]]

void MiniValue(LinkList &L)
{
	// cur是工作指针
	LNode* cur = L->next;
	// Min指向最小值节点,初始假定第一个节点值最小
	LNode* Min = cur;

	// cur->next是带比较的当前节点
	while (cur->next)
	{
		if (cur->next->data < Min->data)
			Min = cur->next;
		// 后移指针
		cur = cur->next;
	}
	printf("最小值=%d\n", Min->data);

	// 处理奇数
	if (Min->data % 2)
	{
		// 若该节点没有后继,则不必交换
		if (Min->next)
		{
			int tmp = Min->data;
			Min->data = Min->next->data;
			Min->next->data = tmp;
		}
	}
	// 处理偶数
	else
	{
		// 若最小值节点是最后一个节点,则无后继
		if (Min->next)
		{
			LNode* del = Min->next;
			Min->next = del->next;
			free(del);
		}
	}
}

两两交换节点

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点,不修改节点的数值

算法思想

可以通过递归方式实现两两交换链表中的节点
递归的终止条件是链表中没有节点,或者链表中只有一个节点,此时无法进行交换
如果链表中至少有两个节点,则在两两交换节点之后,原始链表的头节点变成新链表的第二个节点,原始链表的第二个节点变成新链表的头节点。链表中其余节点的两两交换可以递归地实现
在对链表的其余节点递归地两两交换之后,更新节点之间地指针关系,即可完成整个链表的两两交换
用head表示原始链表的头节点,新的链表的第二个节点,用newHead表示新链表的头节点,原始链表的第二个节点,则原始链表中其余节点的头节点是newHead->next
令head的next=swapPairs(newHead),表示将其余节点进行两两互换,交换后的新的头节点为head的下一个节点,然后令newHead的next指向head,完成了所有的两两互换
最后返回新的链表的头节点,newHead

LNode* swapPairs(LinkList &head)
{
	if (head == NULL || head->next == NULL)
		return head;
	LNode* newHead = head->next;
	head->next = swapPairs(newHead->next);

	newHead->next = head;
	return newHead;
}

开始将head节点指向的单链表传入swapPairs函数
head及head的next均不为NULL
创建指针newHead指向head的next
![[Pasted image 20241112192209.png]]

将newHead的next传入swapPairs函数,返回的头节点链在head的后面,用head的next
![[Pasted image 20241112193210.png]]

进入到下一个栈帧
![[Pasted image 20241112193421.png]]

继续将newhead的next传入下一层递归
![[Pasted image 20241112193601.png]]

这一层head的next为NULL,递归返回head节点
用上一层的head的next指向这次返回的head节点
![[Pasted image 20241112193738.png]]

newhead的next指向head节点
![[Pasted image 20241112193809.png]]

返回newhead,将第一层的head的next指向返回的newhead
![[Pasted image 20241112193931.png]]

newhead的next指向第一层的head
完成交换
![[Pasted image 20241112194010.png]]

交换当前节点与后继节点

编写一个算法交换单链表中指针P所指节点与其后继节点,head是该链表的头指针,P指向该链表中某一节点

算法思想

从头节点开始查找p指针所指节点
要求p指针所指节点与其后继节点交换,需要直到p的前驱节点
这样才能让原p节点的前驱指向原p节点的后继节点

创建一个工作指针cur遍历链表,同时用指针prev保存cur的前一个指针的地址
![[Pasted image 20241112191227.png]]

一直往后遍历,直到cur指向p
![[Pasted image 20241112191253.png]]

判断p的next是否为NULL,如果不为空,再进行交换
cur指向p的next
![[Pasted image 20241112191345.png]]

prev的next指向cur
![[Pasted image 20241112191412.png]]

p的next指向cur的next
![[Pasted image 20241112191520.png]]

cur的next指向p
![[Pasted image 20241112191543.png]]

完成交换

LinkList Exchange(LinkList &head, LNode* p)
{
	// cur是工作指针,指向链表中当前待处理节点
	LNode* cur = head->next;
	// prev是前驱节点指针,指向p的前驱
	LNode* prev = head;

	while (cur && cur != p)
	{
		// 未找到p节点,后移指针
		prev = cur;
		cur = cur->next;
	}
	if (p->next == NULL)
		printf("p无后继节点\n");
	// 处理p节点和后继节点交换
	else
	{
		// 暂存p的后继
		cur = p->next;
		prev->next = cur;
		p->next = cur->next;
		cur->next = p;
	}
}
matlab计算图像信噪比SNR 【代码】matlab计算图像信噪比SNR。 阅读详情

相关推荐

Android布局基础与UI设计入门:打造精美应用界面

恭喜你!现在你已经掌握了Android UI开发的基础知识,包括各种布局类型、常用控件的使用以及一些UI优化技巧。这些知识将帮助你设计出既美观又实用的Android应用界面。

m0_65382359的博客 2056

链表题目:交换链表中的结点

文章目录题目标题和出处难度题目描述要求示例数据范围前言解法一思路和算法代码复杂度分析解法二思路和算法代码复杂度分析 题目 标题和出处 标题:交换链表中的结点 出处:1721. 交换链表中的结点 难度 3 级 题目描述 要求 给你链表的头结点 head\texttt{head}head 和一个整数 k\texttt{k}k。 交换链表正数第 k\texttt{k}k 个结点和倒数第 k\texttt{k}k 个结点的值后,返回链表的头结点(链表从 1\texttt{1}1 开始索引)。 示例 示例 1: 输

stormsunshine的博客 1250

简单的服务器取证

记一次入门服务器取证——药品直销网,涵盖旧版本宝塔、静态IP的配置更改、代码的理解

m0_74559567的博客 3756

链表节点交换

链表节点定义如下:

wxxgreat的专栏 1447

泛微Ecology9单点登录实战指南:从Token获取到页面跳转

本文提供了一份详尽的泛微Ecology9单点登录实战指南,重点解析了Token跳转式SSO的核心流程。内容涵盖从理解关键参数(如appid、loginid)与一次性Token机制,到通过代码示例演示如何正确调用接口获取Token,并详细说明了拼接不同场景跳转地址的完整规则与安全实践,旨在帮助开发者高效、稳定地实现业务系统与OA门户的无缝集成。

ol789012345的博客 1065

linux 内核vxlan收发包流程

1.vxlan口收包处理流程 前面几章详细介绍了vxlan接口的使用,而且已经知道vxlan是 MAC IN UDP中的封装,因此,在解封装之前,一切按照原有流程走,在此复习一下内核收发包流程(驱动层的数据处理这次不再解析,直接从__netif_receive_skb_core开始) #物理网卡处理中断,触发softirq i40e_intr └─napi_schedule_irqoff #i40e softirq把包放到per cpu backlog,触发softirq i40e_napi_p

魏言华的博客 3825

交换链表中的节点

原题 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 参考博客 /** * Definition for singly-linked list. * public class ListNode { * ...

超喜欢榴莲呀的博客 282

基于CatBoost回归模型的完整预测分析:从建模到SHAP可解释性分析

本文介绍了使用CatBoost回归模型进行完整预测分析的流程。首先导入必要的Python库并加载数据,进行数据预处理包括训练测试集划分和归一化处理。然后通过网格搜索优化CatBoost超参数,使用最优参数训练模型并评估预测性能。结果显示模型具有较高的决定系数(R²=0.9944)和较低的误差指标(RMSE=0.0696)。接着进行残差分析和正态性检验,发现残差基本服从正态分布。最后通过SHAP分析实现模型可解释性,识别关键特征影响。该方法为梯度提升树在回归问题中的应用提供了完整解决方案。

fx666_的博客 746

写一个算法交换单链表中p所指结点与其后继结点-21算法题

本题为算法题,交换的是结点,而不是结点的值 注意题目是交换结点,不是交换结点的值。 设q为1,p为2,r为3,r->next为4.原来为1234 1指向3,2指向4,3指向2.最终顺序为1324 结果如图所示,与交换了值的结果相同,但其本质上是交换了结点 代码如下 #include <stdio.h> #include <stdlib.h> //定义结点结构 typedef struct LNode { int data; struct

qq_43389032的博客 1879

app逆向分析案例-95分

先把justtrusmeplus打开设置好95分,开始抓包,得到结果为: https://www.95fenapp.com/api_goods/list/v3.0?is_all=1&keywords=%E7%A7%91%E6%AF%94& page=1&page_size=20 &publish_timestamp=0 &scene=2&scene_type=95fen_android_search_personal&sn=SearchList

weixin_41763171的博客 2742

Python爬虫实战 | 拼多多商品评论采集与深度分析

本文从 API 调用、网页渲染到情感分析与关键词提取,全流程剖析了“拼多多商品评论采集与分析”项目。Scrapy + API 可快速抓取评论;Playwright 可突破 API 限制,抓取完整页面内容;数据清洗 + 分析揭示用户真实反馈;可持续部署、扩展至更多商品 & 时间段;

2201_76125261的博客 1696

线性表(2)链式存储

1.单链表

weixin_45438415的博客 167

手把手教你学Simulink——基于Simulink的无感FOC(滑模观测器+PLL)实战

本文详细介绍了基于Simulink的无感FOC(滑模观测器+PLL)实现方法。主要内容包括:1)SMO+PLL原理精讲,阐述滑模观测器核心思想和PLL的作用;2)系统架构全景图展示;3)Simulink建模全流程,从基础FOC框架到SMO和PLL模块的实现;4)关键参数整定指南和工程实践要点;5)仿真结果分析及常见问题解决方案。该方法可有效替代机械传感器,降低成本并提高可靠性,适用于空调压缩机、电动汽车水泵等工业场景。文章还提供了详细的调试建议和动手实践指导。

MHD0815的博客 83

代码随想录算法训练营第四天 | 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II

java、C语言实现:两两交换链表中的节点、删除链表的倒数第 N 个结点、环形链表 Ⅱ 找环起点

toxic_code的博客 197

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

链表反转的技巧及相关题解

单链表作为一种比较常见的数据结构,经常会出现在面试题中。单链表只有一个后继指针,要实现O(1)空间复杂度的反转,就需要掌握单链表反转的一些技巧。 注:我们这里讨论的都是如何不借助额外空间(即O(1)空间复杂度),实现链表反转。 首先让我们先看看最简单的链表反转: 1. 链表反转(简单) 206. 反转链表 剑指 Offer 24. 反转链表 剑指 Offer II 024. 反转链表 题目描述:把一个单链表反转,并返回反转后的链表头。 解题过程: 这道题可以很容易地用双指针解决:定义两个指针一个指向前

bitkevin的博客 664

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

代码随想录2-链表

链表知道头结点就相当于知道了整个链表,所以在题目里给的是head=[1, 2, 3, 4, 5],程序里写的是head等于第一个位置的值。fast首先走n+1步,这样slow和fast再同时移动,相比于fast先走n步,slow要少走一步,正好在想要删除的节点的上一个节点。那么,p1经过的节点是A+C+B,p2经过的节点是B+C+A,会一起到达C的第一个位置,也就是所求的交点。=p2时,走一步,如果走到A链表末尾,转到B链表;链表分为3个部分,A独有的、B独有的、AB共有的(记作C)

xiahua_kkxx的博客 175

温度PID控制PLC程序

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

数据结构:单链表的相关操作

C:单链表的相关操作

a287100886的博客 642

链表(摘抄自代码随想录)

链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针)。移除头结点和移除其他节点的操作是不一样的,因为链表的其他节点都是通过前一个节点来移除当前节点,而头结点没有前一个节点。直接将C节点的next指针指向E节点就可以了,因为java有自己的内存回收机制,就不用自己动手释放D节点的这块内存。示例 1: 输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5]

qq_74474809的博客 738

Python SciPy linprog 线性规划实战:从建模到求解全解析

线性规划是运筹学中的基础优化技术,用于在满足一系列线性约束条件下,求解线性目标函数的最优值。其核心原理是通过构建决策变量、目标函数和约束条件的数学模型,利用单纯形法或内点法等算法在可行域顶点中搜索最优解。该技术在资源分配、生产调度、投资组合等领域具有重要价值,能够帮助决策者在有限资源下实现利润最大化或成本最小化。本文以Python的SciPy库为工具,深入解析linprog函数的使用方法,通过一个完整的资源调度案例,演示如何将实际问题转化为标准线性规划模型并进行高效求解,涵盖等式约束、边界处理、结果解读等工

weixin_30617695的博客 408

NSGA-II多目标优化SVR超参数:从调参到决策建图

支持向量回归(SVR)超参数优化本质是多目标权衡问题,传统单目标方法如网格搜索易陷入过拟合与泛化失衡。NSGA-II作为一种经典多目标遗传算法,通过非支配排序、拥挤距离与精英策略,在精度(如MAE)、复杂度(支持向量占比)和稳定性(CV误差标准差)之间构建Pareto最优解集,实现从‘找最优参数’到‘生成可解释决策地图’的范式升级。其归一化编码适配SVR连续参数空间,天然规避量纲偏差;三目标协同设计(误差+复杂度+鲁棒性)直击工业落地痛点,已在振动预测、光伏功率预报等时序回归场景验证有效性。本文聚焦NSGA

weixin_30381317的博客 319

【链表】24.两两交换链表中的节点 & 25. K 个一组翻转链表

fff

兰陵鸡王的博客 232

【数据结构与算法】链表2:节点交换与删除 & 链表相交 & 环形链表

算法任务:链表总结、leetcode24.两两交换链表中的节点、leetcode19.删除链表的倒数第N个节点、Leetcode面试题02.07.链表相交、Leetcode142.环形链表II

以放的博客 1166

【算法系列-链表】交换链表节点(反转 + 交换)

【算法系列-链表】交换链表节点类型题(反转链表 + 两两交换链表元素),提供图解

Mwt258的博客 1340

2021-01-31

1520: 交换节点(线性表) 描述 (线性表)编写一个算法来交换单链表中指针P所指结点与其后继结点,HEAD是该链表的头指针,P指向该链表中某一结点。 格式 输入格式 输入链表长度:6 输入链表:1 2 3 4 5 6 输入p指向的节点:5 输出格式 1 2 3 4 6 5 样例 样例输入 Copy 5 7 6 9 8 2 3 样例输出 Copy 7 6 8 9 2 #include<stdio.h> #include<stdlib.h> struct arr { int

liuxinyubest的博客 494

【链表*】交换结点

只要涉及到链表结点的删除或交换,就必须新建虚拟头结点newHead->next=head,让f指针指向newHead作为前置结点指针(删除和交换都需要前置结点指针的),newHead当然不动,程序最后返回的是newHead->next。 两个两个地交换结点 两个两个地就地交换结点。 大致思路: 一定要先新建一个虚拟结点newHead,newHead->nex...

It's the Climb 6304

二、链表(5):两两交换链表中的节点

https://leetcode-cn.com/problems/swap-nodes-in-pairs/ 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 一、思路 这道题目正常模拟就可以了。 建议使用虚拟头结点,这样会方便很多,要不然每次针对头结点(没有前一个指针指向头结点),还要单独处理。对虚拟头结点的操作,还不熟悉的话,可以看这篇链表:听说用虚拟头节点会方便很多?(opens new window)。接..

努力努力努力 1028
上一篇: 链表循环及差集相关算法题|判断循环双链表是否对称|两循环单链表合并成循环链表|使双向循环链表有序|单循环链表改双向循环链表|两链表的差集(C)
下一篇: 链表排序相关算法题|删除节点输出有序结果|不带头节点单链表排序|带头节点单链表排序|单链表快排(C)
ChoSeitaku
博客等级 码龄5年 3452粉丝 557原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值