【数据结构与算法】单链表、双链表和循环单链表中头指针未知的情况下能否删除某节点

在单链表、双链表和循环单链表中,若仅知道指针p指向某结点,不知道头指针,能否将结点p从相应的链表中删去?为什么?若可以,其时间复杂度各为多少?


单链表:不能

在单链表中,需要知道p的前一个结点,才能更改其指向,跳过p结点,实现删除。因为不知道直接前驱,无法删除该节点。

双链表:可以

在双链表中,每个结点都有一个指向前一个结点的指针,因此可以直接找到p的前一个结点,然后将p的直接前驱指向p的直接后继,即可删除p。

cpp 复制代码
p->prior->next=p->next
p->next->prior=p->prior

时间复杂度:O(1)

循环单链表:可以

先沿着循环链表找到p的直接前驱,将p的直接前驱指向p的直接后继即可删除p。因为要沿着循环链表找到p的直接前驱,即遍历一遍链表,时间复杂度为O(n)。

时间复杂度:O(n)

相关推荐
CoovallyAIHub1 分钟前
超越YOLOv8/v11!自研RKM-YOLO为输电线路巡检精度、速度双提升
深度学习·算法·计算机视觉
哭泣方源炼蛊3 分钟前
HAUE 新生周赛(七)题解
数据结构·c++·算法
q***649726 分钟前
SpringMVC 请求参数接收
前端·javascript·算法
Lwcah28 分钟前
Python | LGBM+SHAP可解释性分析回归预测及可视化算法
python·算法·回归
小此方29 分钟前
从零开始手搓堆:核心操作实现 + 堆排序 + TopK 算法+ 向上调整 vs 向下调整建堆的时间复杂度严密证明!
开发语言·数据结构·算法
前端炒粉4 小时前
35.LRU 缓存
开发语言·javascript·数据结构·算法·缓存·js
断剑zou天涯6 小时前
【算法笔记】窗口内最大值或最小值的更新结构
java·笔记·算法
smj2302_796826526 小时前
解决leetcode第3753题范围内总波动值II
python·算法·leetcode
骑着猪去兜风.8 小时前
线段树(二)
数据结构·算法
fengfuyao9859 小时前
竞争性自适应重加权算法(CARS)的MATLAB实现
算法