编程之美-从无头单链表中删除结点

单链表的插入和删除(带头结点与不带头结点) 单链表的插入和删除 一、思维导图 二、按位序插入 ①带头结点 //在第i个位置插入元素e(带头结点) typedef struct LNode{ Elemtype data; struct LNode *next; }LNode,*LinkList; bool ListInsert(LinkList &L,int i,Elemtype e){ if(i<1) return false; LNode *p;//指针p指向当前扫描到的结点 int j=0;//当前p指向的是第几个结 阅读详情
void DeleteRandomNode(node *pCurrent)
{//从无头单链表中删除结点

	assert(pCurrent != NULL);
	node *pNext = pCurrent->next;
	if(pNext != NULL)
	{
		pCurrent->next = pNext->next;
		pCurrent->data = pNext->data;
		delete pNext;
	}
}


void ReverseList(node *&head)
{//给点头指针(有头结点),只遍历一次将单链表逆转反序

	node *pCurrent,*pNext;
	pNext = head->next;
	head->next = NULL;                //把头结点拿出来

	while(pNext)
	{//头插法 插入结点

		pCurrent= pNext;
		pNext = pNext->next;

		pCurrent->next = head->next;  //从头插入
		head->next = pCurrent;
	}	
}

void ReverseListNohead(node *&head)
{//没有头结点,将单链表逆转反序

	node *pPre,*pCurrent,*pNext;

	pPre = head;
	if(pPre == NULL)                  //链表没有结点,头指针指向NULL
		return ;
	else                              //否则,跟上面一样
	{
		pNext = pPre->next;
		while(pNext)
		{
			pCurrent = pNext;
			pNext = pNext->next;

			pCurrent->next = pPre;
			pPre = pCurrent;
		}
	}
	head->next = NULL;                 //将第一个结点next改为NULL
	head = pCurrent;                   //最后一个结点(pCurrent)改为head
	
	


}

设计一个递归算法,删除带头结点的单链表L中所有值为x的结点 这个算法对于不带头结点的,如果首元结点的数据域为X的话,则无法适用。 /*设计一个递归算法,删除带头结点的单链表L中所有值为x的结点*/ #include <stdio.h> #include <stdlib.h> typedef struct Link{ int data;//代表数据域 struct Link* next;// 代表指针域,指向直接后继元素 ... 阅读详情

相关推荐

Obsidian和Typora图片路径同步终极指南:告别混乱的assets文件夹

本文详细解析了Obsidian与Typora图片路径同步的终极解决方案,通过Custom Attachment Location插件实现动态路径管理,解决了两款工具间图片兼容性问题。文章提供了从基础配置到高级应用的完整指南,帮助用户告别混乱的assets文件夹,提升工作效率。

g9h0i1的博客 822

有一个不带头结点的单链表,设计一个算法删除其中所有结点值为x的结点

对应的递归模型为: f(L,x)=不做任何事 , 当L为NULL时; f(L,x)=删除L结点;L指向原后继结点, 当L->data=x时; f(L,x)=f(L->next,x) 当L->data!=x时 源代码如下: #include <iostream> u...

慢慢的博客 4593

Win10系统内存占用异常飙升?三步排查法快速定位问题根源

本文针对Win10系统内存占用异常飙升问题,提供了一套三步排查法。首先利用任务管理器和资源监视器进行深度系统体检,定位隐形内存消耗者;其次通过干净启动和禁用非必要后台服务,揪出导致内存泄漏的第三方软件或驱动;最后进行终极深度清理,包括检查内存完整性、调整虚拟内存设置以及更新关键驱动程序,帮助用户快速恢复系统流畅运行。

weixin_29251567的博客 195

深刻理解:带头结点和不带头结点的区别 使用头结点的优势

一、概念辨析 线性表的插入删除需要移动大量的元素,因此引入链表(本文讨论单链表)的概念,链表元素之间通过“链”来链接,因此插入和删除时不需要大量的移动元素,而只需要改变“链”的关系即可。 头指针:通常使用“头指针”来标识一个链表,如单链表L,头指针为NULL的时表示一个空链表。 头结点:在单链表的第一个结点之前附加一个结点,称为头结点。头结点的Data域可以不设任何信息,也可以记录表长等相关...

Code for Coffee 3万+

【智能体评测】BrowserUse:一款超越 Anthropic Computer Use 的开源智能体

本文将全面介绍 BrowserUse 的核心功能、配置与使用方法,以及通过多场景测试评估其性能。

surfirst的博客 4099

Cadence PSpice 仿真11:电感型低通滤波器最坏情况分析仿真实战图文教程

在进行蒙特卡罗分析时会将元器件的容差考虑进去,然后通过运行多次的随机仿真,得到电路输出的一个范围。但是多数情况下设计师关注的只是电路的最坏情况是否满足设计要求。PSpice的最坏情况分析是取在容差的边界点元件参数进行仿真以计算出电路输出的最坏情况。所以如果如果电路中有10个元件的话,需要先取10个元件的标准值仿真1次,然后再分别在10个元件的容差边界处各仿真1次,然后再对仿真结果进行统计和计算,再最坏情况下再仿真1次。

fydar的博客 1944

数据结构习题2.2.4:设计递归算法删除不带头结点的单链表L中所有值为x的结点

前言 本题是运用递归解决问题 正文 不带头结点的单链表L中所有值为x的结点 /*删除链表中的x结点(递归)*/ void del_x(LNode *L,int x){ LNode *p; if(L->next=NULL) return; else if(L->data=x){ p=L; L=L->next;//这里L为调用该函数的外层L->next(就是...

无由页的博客 931

信贷模型域——客户管理阶段模型(贷中模型)

本文主要探讨了信贷模型域中的客户管理阶段模型,重点聚焦于交叉销售模型。交叉销售模型不仅应用于贷中阶段,还贯穿于贷前、贷中、贷后全过程,其核心作用在于提升客户价值、增强客户粘性、降低流失率以及实现风险与收益的平衡。文中通过具体案例展示了交叉销售模型在现实业务中的应用,并指出其在贷中阶段的主要任务是提升存量客户价值、增加产品使用率,同时有效控制风险。

庄小焱 1879

编程题, 设计一个递归算法,删除不带头结点的单链表L中所有值为x的节点

在做考研相关的题的时候,遇到了上面的难题,而如果运用答案的方法进行引用的话,可能很多人会难以理解。下面是用C语言实现此函数的版本:希望各位能够喜欢 struct Node *delete_node(struct Node *head, int x) { // 如果列表为空,直接返回 if (head == NULL) return NULL; // 如果头结点的值为x,则从头把此节点删除 if (head->value == x) {

lidiyscrp的博客 1247

168、运动控制中的标定:编码器零点标定

文章摘要 运动控制系统中的编码器零点标定是确保精确控制的关键基础步骤。文章通过实际案例说明,即使0.3度的零点偏移也会导致电机异常抖动。详细介绍了三种标定方法:反电动势法(需示波器)、电流注入法(适合量产)和霍尔传感器法(粗标定),并指出常见陷阱如忽略极对数、Z脉冲重复性问题和温度漂移。提供了基于STM32的嵌入式实现代码片段,强调标定后的静态、动态和负载验证的重要性。作者建议量产产品设置自动标定工位,研发样机采用更精确的方法,并强调标定数据应与电机序列号绑定。

m0_50546716的博客 137

【系统架构设计师】论文模板样例:论软件系统架构风格

本人于年月参与项目,该系统为*,在该项目组中我担任系统架构师岗位,主要负责系统整体架构设计。本文以该车联网项目为例,主要讨论了软件架构风格在该项目中的具体应用。底层架构风格我们采用了虚拟机风格中的解释器,因该公交共有几十种不同的数据协议,使用解释器风格可以满足整车数据协议兼容性需求;中间层关于应用层的数据流转采用了独立构件风格中的隐式调用,以减低系统间耦合度、简化软件架构,提高可修改性方面的架构属性;应用系统层采用了B/S的架构风格,统一解决公交行业性难题“实施推广难、维护难”问题。

数据知道的博客 9927

单链表-删除并释放以L为表头指针的单链表的所有结点(双指针法)

单链表的存储结构: typedef struct LinkList{ int data; LinkList * next; } 分析: 要删除所有结点,怎么删除? 往往都要定义前后指针 pre ,p 毕竟一个指针不够用。 思路: 1.定义两个指针pre,p ,其中pre开始指向头结点 (pre = L). 2.通过while循环,首先释放头结点。然后两个指针,同步后移 3. 循环跳出后,pre指向最后一个节点,最后把该节点删除 C代码实现: void Dest

muyu_muyu的博客 1233

边缘AI工业落地:YOLO26-Seg + RK3588 NPU 极致部署(低功耗+实时实例分割,工业场景全覆盖)

本次实战汇总了「YOLO26-Seg+RK3588 NPU」工业边缘部署中最常见、最致命的8个坑点,所有坑点均来自真实工业项目,解决方案均为零代码/一键操作,无需复杂配置,能让你少走90%的弯路,节省大量时间,必看必记!❌ RKNN转换报错「算子不支持/模型加载失败」→ ✅ 导出ONNX时必须指定opset=12,重新导出即可,RK3588唯一兼容版本;❌ 分割mask错位/轮廓模糊 → ✅ 导出ONNX时加,并保证RKNN的归一化参数与YOLO26一致,零代码修复;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1717

【编程之美】从无头单链表中删除结点

问题:假设有一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(不是第一个也不是最后一个),如何将该结点删除?   分析:假设给定的指针为pCurrent,Node *pNext=pCurrent->Next(pNext指向pCurrent的下一个结点)。根据题意,pNext!=NULL. 若pCurrent指向中间要删除的节点B,如下图所示: 但是该链表没有头指针,无法

hllyyy的专栏【Nothing replaces hard work】 440

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

WINCC7.3破解文件

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

【编程之美】读书笔记:从无头单链表中删除结点

问题:假设有一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(不是第一个也不是最后一个),如何将该结点删除?         分析:假设给定的指针为pCurrent,Node *pNext=pCurrent->Next(pNext指向pCurrent的下一个结点)。根据题意,pNext!=NULL. 若pCurrent指向中间要删除的节点B,如下图所示: 但是该链表没有头指针,

xiaoding133的专栏【Stay hungry,Stay foolish】 1396

温度PID控制PLC程序

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

编程之美-从无头单链表中删除节点方法整理

【试题描述】 假设有一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(不是第一个,也不是最后一个),请将该节点从单链表中删除。 程序:

GarfieldEr007的专栏 898

编程之美:第三章 结构之法 3.4从无头单链表中删除节点

/* 从无头单链表中删除节点: 假设有一个没有头指针的单链表。一个指针指向此单链表中间的某一个节点(不是第一个,也不是最后一个),请将该节点从单链表中删除 参见:剑指offer在O(1)时间删除节点,本质上是将后面节点的节点值赋给待删除节点,然后删除后面的节点即可。 */ /* 关键: 1 if(pNext)//这里还要对pNext不空进行判断 */ #include typedef

qingyuanluofeng的专栏 637

单链表有头节点与无头结点的区别

1.先区分一下概念: 头结点: 在单链表第一个元素结点之前设置的一个结点,数据域可以不存任何信息,指针域指向单链表第一个元素的结点。对于单链表来说,头结点可有可无,但为了操作方便,一般情况下单链表都具有头结点,后面的分析将会区别一下有头结点和没有头结点的区别。 优点:减少了单链表添加删除时特殊情况的判断,减少了程序的复杂性,主要是添加和删除在第一个有元素的结点(首元结点)上有区别,如果链表没有头...

weixin_46273997的博客 1万+

单链表中有头结点 & 无头结点的各种基本操作(完整代码)

基础薄弱,理解尚浅,若有错误,欢迎指正。 线性表-单链表(Ⅲ) 单链表中有头结点 & 无头结点的各种基本操作(完整代码) 有头结点 #include<stdio.h> #include<malloc.h> //用malloc函数开辟新单元时需用此头文件 typedef int ElemType; typedef struct LNode //定义单链表结点类型 { ElemType data; //数据域 struct LNode *next; //指针域 }LNode,

Miss Z的博客 3367

编程之美—从无头链表中删除结点

一个无头单链表中,一个指针指向此单链表中间的一个结点(不是第一个

zhonghua18517的专栏 951

无头结点单链表的插入删除语句

已知L是无表头结点的单链表,且P结点既不是首元结点,也不是尾元结点。回答下题 1、在P结点后插入S结点的语句序列是 s->next = p->next;//1 p->next = s;//2 如下图所示 2、在P结点前插入S结点的语句序列是 (1)循序交换数据的情况 先在P结点之后插入S结点 定义一个中间变量将S和P的数据交换 s->next = p->nex...

qq_43411563的博客 3840

编程之美——从无头单链表中删除节点

编程之美——从无头单链表中删除节点      问题:假设有一个没有头指针的单链表。一个指针指向此单链表中间的一个节点,请将该节点从单链表中删除。     分析:典型的“狸猫换太子”, 若要删除该节点,正常情况下,应该要知道该节点的前面节点的指针,但是由于单链表中没有头结点,所以无法追溯到该节点前面的那个节点,因此,这里采用了“移花接木”的方法。设该节点为B,下一个节点为C。那么,首先将

chenglinhust的专栏 1047

[编程之美] PSet3.4 从无头单链表中删除节点

 问题描述:         假设有一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(非第一个节点, 也非最后一个节点)。请将该节点从单链表中删除。

飞扬的青春的专栏 1081

C语言函数——单链表结点删除

1-1单链表结点删除 本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中所有存储了某给定值的结点删除。链表结点定义如下: truct ListNode { int data; ListNode *next; };> 函数接口定义: struct ListNode *readlist(); struct ListNode *deletem( struct ListNode ...

weixin_43939158的博客 2719

删除单链表中所有值为x的结点

#include<stdio.h> #include<stdlib.h> typedef struct LNode{ int data; struct LNode *next; }LNode, *LinkList; LinkList List_Init(){ LinkList p = (LinkList)malloc(sizeof(LNo...

Node_Su的博客 8143

不带头结点的单链表的创建、插入、删除。

不带头结点的单链表的创建、插入、删除。 #include<stdio.h>#include<stdlib.h>typedef struct node{ int data; node *next;}node;//创建不带头结点的单链...

baijiaozhan8157的博客 6136
上一篇: 编程之美-字符串移位包含
下一篇: 判断数组中的数值是否连续
hello2sys_cs
博客等级 码龄14年 0粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值