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

在单链表、双链表和循环单链表中,若仅知道指针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)

相关推荐
papership5 分钟前
入门级-数据结构-2、简单树:二叉树的遍历(前序、中序、后序)
数据结构·算法
WWW65265 分钟前
代码随想录 打卡第五十四天
数据结构·c++·算法
happymaker06266 分钟前
LeetCodeHot100——15.三数之和
数据结构·算法
墨白曦煜7 分钟前
算法实战笔记:空间换时间的黑魔法——单调栈全景解析(十一)
java·笔记·算法
大模型最新论文10 分钟前
小红书提出 RedKnot:分头处理 kv 缓存,延时降低 60%效果还提升
算法
随意起个昵称15 分钟前
线性dp-LIS题目6(友好城市,二分优化)
算法·动态规划
数据科学小丫20 分钟前
算法:随机森林算法
算法·随机森林·机器学习
Samson Bruce28 分钟前
【初高中数学】
线性代数·数学·算法·机器学习
redaijufeng28 分钟前
我在C++中深入理解了继承,收获颇丰
java·c++·算法
Ricky055329 分钟前
DEIM :采用改进匹配算法实现快速收敛的DETR(中国25年3月研究)
人工智能·算法·目标跟踪