在不知带头节点地址的情况下删除和插入一个p指针指向的节点总结
在不知带头节点地址的情况下删除和插入一个p指针指向的节点总结 (p指向的不是第一个,也不是最后一个)A->B->C *p->B
- 插入(在p结点之前插入q)
解析: 直接往p前插入q,由于没有头节点,不能遍历到p的位置,所以向p的后面插入q,在交换p、q的值
q->next = p->next;
p->next = q;
swap(&p->data, &q->data);
- 删除
有一个单项的链表,在没有头结点的情况下,只知道有一个指向结点B的指针p,假设这个结点B不是尾结点,删除该节点B。
解析:要删除p指向的结点B,必须要将结点B前后的两个节点A和C连接起来,但是该单链表没有头结点,因此无法追溯到A,也就无法将A和C相连了。无法删除结点B,但我们可以删除B的后继结点C,并通过p->next = p->next->next重新将链表连接起来,而唯一丢失的是结点C的数据项data。因此,我们只需要将结点C的数据项取代结点B的数据项,然后将真正指向结点C的指针删除即可是实现将结点B删除。
p->data = p->next->data; //p->next == C
p->next = p->next->next;
free(p->next)
扩展:给定链表的头指针和一个结点指针,在O(1)时间删除该结点。其实也可以用这种方式,把要删除的节点下一个的数据挪到需要删除节点里,再把下一个节点删除。
在不知带头节点地址的情况下删除和插入一个p指针指向的节点总结的更多相关文章
- 剑指offer25:复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),结果返回复制后复杂链表的head。
1 题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用 ...
- 双重检查加锁机制(并发insert情况下数据重复插入问题的解决方案)
双重检查加锁机制(并发insert情况下数据重复插入问题的解决方案) c#中单例模式和双重检查锁 转:https://blog.csdn.net/zhongliangtang/article/deta ...
- 如何在不重启或重新格式化hadoop集群的情况下删除集群节点
在master节点上的hadoop安装目录下 进入conf目录 配置hdfs-site.xml文件 添加节点如下: <property> <name>dfs.hosts.exc ...
- 如何处理高并发情况下的DB插入
1. 我们需要接收一个外部的订单,而这个订单号是不允许重复的 2. 数据库对外部订单号没有做唯一性约束 3. 外部经常插入相同的订单,对于已经存在的订单则拒绝处理 对于这个需求,很简单我们会用下 ...
- 并发insert情况下数据重复插入问题的解决方案
背景介绍 通常我们在接口里要保存一条数据时,会先判断该条记录在数据库里是否存在,如果不存在就插入,如果存在就返回已经存在. 就拿常见的工单来举例 Order order = orderService. ...
- Acticiti流程引擎在已知当前流程定义id的情况下获取当前流程的所有信息(包括:节点和连线)
这里我们已知流程已经部署,我的需求是获取当前流程的所有任务节点,我使用instanceof关键字来进行匹配 private List<UserTask> getProcessUserTas ...
- 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
// test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...
- 在mysql 上如何在不影响生产的情况下删除一个大表
mysql 中常用的删除的方法基本上有下面三种方式: 1.delete 一般用于删除少量表中的数据 优化建议,一定要加上where 条件,并且where条件的列上 一定要有主键或者索引.否则会出现全表 ...
- sql在外键存在的情况下删除表
SQL Server 批量 停用/启用 外键约束 今天百度知道上面,看到这样一个要求: 现在有一个库,有很多张表想要删除一张表的记录的时候,由于外键关联太多,所以,没法删除相应的记录,谁能帮忙写个存储 ...
- 知道一个数组某个index对应的值 不知道下标的情况下删除该值
for (index,item) in Arr.enumerated() { if item == item { Arr.remove(at: index) } } 更好的方法是用数组的filter尾 ...
随机推荐
- 处理.git文件夹过大出现臃肿问题-filter-branch和BFG工具
Git开发手册 git一些不常用的命令记不住,可以查看git开发手册(https://m.php.cn/manual/view/34957.html) 1..git/objects/pack 文件过大 ...
- 帮老娘导入SF信息
转自自己的QQ空间 2023/1/3 老娘公司要统计Excel 简单说就是把顺丰上面寄的85个快递填到表里去 再把没有寄的从那两张表加起来130多个人里面揪出来单独填表 有些企业的Excel就是个灾难 ...
- Redis的五大数据类型及其使用场景
前言 redis是一个非常快速的非关系数据库解决方案.其简单的键值数据模型使 Redis 能够处理大型数据集,同时保持令人印象深刻的读写速度和可用性.redis提供了五种数据类型,分别是是: ...
- Linux 日志服务管理
日志管理 1 系统日志管理 1 rsyslog系统日志服务 日志记录的内容包括: 历史事件:时间,地点,人物,事件 Jul 18 14:30:53 # 时间 ubuntu2204 # 地点 (在哪个主 ...
- javascript高级程序设计第三版FileApi 学习与实践1
文件操纵 File API File API 在表单中的文件输入字段的基础上,又添加了一些直接访问文件信息的接口. H5 在 DOM 元素中为文件输入元素添加了一个 files 集合. 在通过文件输入 ...
- 自用 .net C# List集合和DataTable互转,可自定义表头
using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.R ...
- 关于bzoj3306(树)的一些反思
1.加零大法好,用好没烦恼 2.不要瞎开long long 3.万物皆可变成wa 4.如果超时,试图把循环中中的东西拉到外面来
- wget: 未找到命令
输入以下命令: yum -y install wget
- [golang]标准库-json
前言 json数据格式通常包含两个操作:序列化(把对象转换成JSON数据类型)和反序列化(把JSON数据类型转换成对象),二者操作互逆. Go语言中相关标准库为encoding/json. 示例代码 ...
- Programming abstractions in C阅读笔记: p114-p117
<Programming Abstractions in C>学习第48天,p114-p117,总结如下: 一.技术总结 主要通过random number介绍了随机数的相关用法,int ...