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

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

相关推荐
khalil10208 小时前
代码随想录算法训练营Day-46 动态规划13 | 647. 回文子串、516.最长回文子序列、动态规划总结
数据结构·c++·算法·leetcode·动态规划·回文子串·回文子序列
学习3人组8 小时前
柔性排产时序算法+中间过程+阶段目标 细化表格
算法·mes
he___H9 小时前
算法快与慢--哈希+双指针
算法·leetcode·哈希算法
呃呃本9 小时前
算法题(回溯)
算法
刀法如飞9 小时前
Rust数组去重的20种实现方式,AI时代用不同思路解决问题
人工智能·算法·ai编程
yxc_inspire9 小时前
25年CCPC福建邀请赛补题
学习·算法
Raink老师9 小时前
用100道题拿下你的算法面试(链表篇-4):合并 K 个有序链表
算法·链表·面试
Liangwei Lin10 小时前
LeetCode 20. 有效的括号
算法
richard_yuu10 小时前
数据结构|二叉树层序遍历 & 线索二叉树:吃透二叉树进阶核心考点
数据结构
IronMurphy10 小时前
【算法四十四】322. 零钱兑换
算法