首页 > 其他分享 >在不知带头节点地址的情况下删除和插入一个p指针指向的节点总结

在不知带头节点地址的情况下删除和插入一个p指针指向的节点总结

时间:2023-10-26 21:12:43浏览次数:38  
标签:结点 删除 next 插入 data 节点 指针

在不知带头节点地址的情况下删除和插入一个p指针指向的节点总结 (p指向的不是第一个,也不是最后一个)A->B->C *p->B

  1. 插入(在p结点之前插入q)
    解析: 直接往p前插入q,由于没有头节点,不能遍历到p的位置,所以向p的后面插入q,在交换p、q的值
  q->next = p->next;
  p->next = q;
  swap(&p->data, &q->data);
  1. 删除
    有一个单项的链表,在没有头结点的情况下,只知道有一个指向结点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)时间删除该结点。其实也可以用这种方式,把要删除的节点下一个的数据挪到需要删除节点里,再把下一个节点删除。

标签:结点,删除,next,插入,data,节点,指针
From: https://www.cnblogs.com/joiln/p/17790266.html

相关文章

  • 使用NvicatPremium时,Mysql数据库插入数据时,报错1064
    使用navicatPremium新版本时,插入数据,显示错误1064-YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear''choose'('ChooseNo','SNo','CNo','......
  • 初阶指针(Pointer)---【C语言】
    ⛩️博主主页:@威化小餅干......
  • 易混知识 | 数组指针 VS 指针数组
    ⛩️博主主页:@威化小餅干......
  • 双指针模型
         #include<iostream>#include<cstdio>#include<cstring>#include<algorithm>usingnamespacestd;constintN=1e6+10,M=2010;intn,m;inta[N];intst[M];intll,rr=1e8;intmain(){scanf("%d%d&quo......
  • WebStorm 快捷键插入注释时,注释从开头开始,中间有许多空格的解决办法
    前言有些配置被乱改了,导致写代码时非常难受,我遇到的事儿是在vue模板中添加注释,之前都是在光标处插入的注释块,今天突然发现注释从开头开始插入了,中间还有一堆空格解决办法我们在vue中出现的问题,那我们就找vue的template模板中出现了问题,因为vue的template适合HTML有关联的,所以我们打......
  • 故障解析丨Clone节点导致主从故障
    1.背景概述在一次主从复制架构中,由于主节点binlog损坏,导致从节点无法正常同步数据,只能重做从节点;因此使用MySQL8.0.17开始提供的clone技术进行恢复,恢复后的2天都发生了主从报错数据冲突。通过解析binlog发现,同一时刻主从节点都在执行同一条语句,因此询问业务是否在主从节点都执......
  • C++指针基础
    指针基础目录指针基础引用定义和访问案例内存空间空指针和野指针const修饰指针指针之间的赋值通过指针改变原数据值指针和数组案例1案例2说明指针和函数动态内存指针潜在危险产生的原因:危害规避参考资料引用引用变量是对现有变量的引用,它是使用&运算符创建的:stringfood="......
  • 380. O(1) 时间插入、删除和获取随机元素
    实现RandomizedSet类:RandomizedSet()初始化RandomizedSet对象boolinsert(intval)当元素val不存在时,向集合中插入该项,并返回true;否则,返回false。boolremove(intval)当元素val存在时,从集合中移除该项,并返回true;否则,返回false。intgetRandom()随机返回现......
  • Redis-cluster群集操作步骤(主从切换、新增、删除主从节点)
    1.进入集群客户端任意选一个redis节点,进入redis所在目录cd/redis所在目录/src/./redis-cli-h本地节点的ip-predis的端口号-a密码[root@mysql-db01~]#redis-cli-h10.0.0.51-p637910.0.0.51:6379> 2.查看集群中各个节点状态集群(cluster)clusterinfo......
  • 使用函数指针和信号槽函数情况比较
    函数指针的使用场景:C风格回调函数:当需要在C风格的API或库中使用回调函数时,函数指针非常有用。这允许您将函数指针传递给CAPI,以便在特定事件发生时调用您的函数。例如,Qt的一些底层模块可能需要与C库进行交互,这时函数指针是一个有用的工具。定时器:在Qt中,您可以使用QTimer类来触......