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

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

相关推荐
Java面试题总结4 分钟前
浅析二叉树、B树、B+树和MySQL索引底层原理
数据结构·b树·mysql
小比特_蓝光7 分钟前
string类的模拟实现
数据结构·c++·算法
404未精通的狗8 分钟前
(数据结构)AVL树
数据结构
uesowys10 分钟前
Apache Spark算法开发指导-Gradient-boosted tree regression
算法·spark
fs哆哆11 分钟前
在VB.NET中,随机数生成教程:包含上界的整数与双精度数
算法
香芋Yu13 分钟前
【强化学习教程——01_强化学习基石】第03章_动态规划与策略迭代
算法·动态规划·代理模式
云深处@15 分钟前
【数据结构】顺序表
数据结构
YGGP19 分钟前
【Golang】LeetCode 239. 滑动窗口最大值
算法·leetcode·职场和发展
Swift社区20 分钟前
LeetCode 389 找不同 - Swift 题解
算法·leetcode·swift
寻寻觅觅☆23 分钟前
东华OJ-基础题-124-分数化小数(C++)-难度中
开发语言·c++·算法