问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

如何在o时间删除链表节点

发布网友 发布时间:2022-05-01 02:01

我来回答

1个回答

热心网友 时间:2022-06-22 04:57

算法思路:

一般我们是从头节点开始遍历,知道找到要删除的节点的前面一个节点,但是时间复杂度为O(n)
改进思路:找到要删除的节点pDeleteNode的下一个节点pNext,把下一个节点的值(pNext->m_nValue)
赋给要删除的节点(PDeleteNode->m_nValue),再把要删除的节点指向下一个节点的下一个节点:(pDelete->m_pNext = pNext->m_pNext)
然后再把pNext节点删除,pNext = NULL;

代码:

[cpp] view plain copy print?
// DeleteNodeInList.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
using namespace std;

/*
算法思路:
一般我们是从头节点开始遍历,知道找到要删除的节点的前面一个节点,但是时间复杂度为O(n)
改进思路:找到要删除的节点pDeleteNode的下一个节点pNext,把下一个节点的值(pNext->m_nValue)
赋给要删除的节点(PDeleteNode->m_nValue),再把要删除的节点指向下一个节点的下一个节点:(pDelete->m_pNext = pNext->m_pNext)
然后再把pNext节点删除,pNext = NULL;

*/

struct ListNode
{
int m_nValue;
ListNode* m_pNext;
};

void DeleteNode(ListNode** pListHead, ListNode* pToBeDeleted)
{
if (!pListHead || !pToBeDeleted)
{
return;
}
if (pToBeDeleted->m_pNext != NULL)//删除的节点不是尾巴节点
{
ListNode* p = pToBeDeleted->m_pNext;
pToBeDeleted->m_nValue = p->m_nValue;
pToBeDeleted->m_pNext = p->m_pNext;

delete p;
p = NULL;
}
else if (*pListHead == pToBeDeleted)//链表只有一个节点,删除头节点也是尾巴节点
{
delete pToBeDeleted;
pToBeDeleted = NULL;
*pListHead = NULL;
}
else//链表中有多个节点,删除尾巴节点
{
ListNode* pNode = *pListHead;
while (pNode->m_pNext != pToBeDeleted)
{
pNode = pNode->m_pNext;
}
pNode->m_pNext = pToBeDeleted->m_pNext;
delete pToBeDeleted;
pToBeDeleted = NULL;
}

}

/*
分析: 对于n-1个非尾巴节点而言,我们可以在O(1)的时间把下一个节点的内存复制覆盖要删除的节点,并删除下一个节点;
对于尾巴节点而言,由于仍然需要顺序查找,时间复杂度是O(n).因此总的平均时间复杂度是[(n-1)*O(1)+O(n)]/n,因此平均时间
复杂度是O(1);

*/

int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}

对于n-1个非尾巴节点而言,我们可以在O(1)的时间把下一个节点的内存复制覆盖要删除的节点,并删除下一个节点;

对于尾巴节点而言,由于仍然需要顺序查找,时间复杂度是O(n).因此总的平均时间复杂度是[(n-1)*O(1)+O(n)]/n,

因此平均时间复杂度是O(1);
interview-o 代码用法

interview-o给定链表的头指针和一个结点指针,在O(1)时间内删除该结点。需要注意的是,这里只是删除该结点的步骤为O(1),而不是查找到该结点的时间复杂度。求解思想:一般来说,我们删除链表中的一个结点是将在它前驱结点上进行操作,将它前驱结点的next指针指向K的后继节点,K的后继指向NULL,然后删...

多个文件表格合并成一个

作为上海悉息信息科技有限公司的一员,我们专注于提供高效的数据处理解决方案。对于多个文件表格的合并需求,我们通常采用专业的数据整合技术,确保数据的准确性和一致性。通过精确匹配表格字段和格式,我们能够快速、准确地将多个表格合并成一个,为用户提供更加便捷的数据管理和分析体验。这一服务广泛应用于各种行业,帮助客户实现数据的有效整合和利用。Excel一键自动匹配,在线免费vlookup工具,3步完成!Excel在线免费vlookup工具,点击65步自动完成vlookup匹配,无需手写公式,免费使用!

链表(带头结点)基本操作实验

删除操作也需要从头引用开始遍历单链表,直到找到第i个位置的结点。如果i为1,则要删除第一个结点,则需要把该结点的直接后继结点的地址赋给头引用。对于其它结点,由于要删除结点,所以在遍历过程中需要保存被遍历到的结点的直接前驱,找到第i个结点后,把该结点的直接后继作为该结点的直接前驱的直接后...

单链表 插入元素 时间复杂度能否为O(1)?删除呢?

不能。首先要找到要插入或删除的结点的前一个位置 ,需要 O(n)。然后插入或删除是O(1)合计所需要的时间是O(n)+O(1)=O(n).很多人对链表的插入和删除误认为有很大的时间优势是错的。和顺序表一样,都是O(n).单链表的好处是不需要大量数据元素。而对运行时间复杂度没有改善。

...使得最后得到的链表中的所有结点的数据域值都不同。

}until p=null 时间为O(n) 空间O(m)

什么是链表

相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。使用链表结构可以克服数组链表需要预先知道数据大小的...

LeetCode 82 - 删除排序链表中的重复元素 II (Python3|Go)

如果 is_pre_duplicated 是 false ,则最后一个结点的值不重复,加入到结果链表中 时间复杂度:O(n)空间复杂度:O(1)代码(Python3)代码(Go)代码(Rust)题目链接:Remove Duplicates from Sorted List II :leetcode.com/problems/r...删除排序链表中的重复元素 II:leetcode-cn.com/problem.....

循环单链表问题。数据结构学得好的解释一下

第二类链表则麻烦一点,因为知道n不能直接找出n+1,要从尾部往回扫描至n+1,这个过程是线性级的.然后把n+1的头指针指向w,w的头指针指向n.这个过程常数级.合起来就是线性级O(n)删除时,一般是定位n删除n+1,这时候先找出n+2,然后将n的尾指针指向n+2即可.这样只用常数级操作O(1).对于第二类我有...

用算法实现:单链表和顺序表删除。删除顺序表中值相同的多余结点_百度知 ...

{//原有堆元素在R-&gt;data[1]~R-&gt;data[R-&gt;length], //将R-&gt;data[i]删除,即将R-&gt;data[R-&gt;length]放入R-&gt;data[i]中后, //将R-&gt;length减1,再进行堆的调整, //以R-&gt;data[0]为辅助空间,调整为堆(此处设为大根堆) int large;//large指向调整结点的左右孩子中关键字较大者 ...

在单链表中删除一个指定节点的后继的时间复杂度是多少?

1. 考虑单链表具有n个节点的情况,删除第i个节点的后继的时间复杂度是O(n)。2. 这是因为在最坏的情况下,需要找到指定节点的前驱,这需要访问前n-1个节点,以便能够更新第i个节点的指针,从而删除其后继。3. 具体来说,存在一个for循环,其条件为i&lt;n,这意味着循环将执行n-1次。4. 在每次...

数据结构

选D,很多人选C,因为他们没有考虑到删除节点时带尾指针的单循环链表和带头结点的双循环链表的差别,在末尾删除结点是,在带尾指针的单循环链表中指针就得顺序遍历到要删除的结点的前一位,如果链表长度是n那么时间复杂度是O(n),而带头结点的双循环链表只需修改front指针即可时间复杂度是0(1)...

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
三星note3 如何显示来电归属地 note3如何设置显示来电归属地? 港版的 note3 怎么设置来电归属啊? 郑州和开封到底什么关系 执业中药师合格分数线每年都是72分吗? 全国中药师资格分数多少及格啊 ...和等于180°,这是古希腊数学家欧几里得提出的定理。在此后的两千多... 我老公发烧刚好,我们在一起,然后我感觉他没用劲,精子会进去吗 丈夫残疾不能自理,妻子可以提出离婚吗?寻求法律帮主 老公发烧了能要小孩吗 问一个很基础问题.align 0是什么意思- - 平茨高尔进口价钱多少 某股票今天股息入账300多,入在总资产里,然后发现股票的盈亏里少了300 德意和方太的燃气灶哪个好 德意燃气灶打着火10秒后息灭是什么原因 danyi德意煤气灶一个炉眼开小火一会就灭了怎么办 如何在excel中设置日期格式? 如何在EXCEl中设定日期的格式?如何设定2009-1-1为2009-01-01? 鸡心该怎么做?? 鸡心如何做好吃?可以酱着吃吗?制作方法是什么? 鸡心怎么做适合孩子吃 怎样做鸡心 最早几点有啊,7点半的飞机大概提前多久到机场取票 飞机场可以提前取票吗 离飞机起飞还有39分钟机场不给取票合理吗 在网上买了飞机票,请问怎么取票?在那里取票?我9点20的机票,必须几点到机场?必须几点取到票? 网上订的飞机票没赶上,作废了还能取票吗? 我在网上订的飞机票没赶上时间作废了还能取票吗? 张家口飞机取票规定 飞机票提前1个月定票要在飞机起飞前多久取票 如何在O的时间里删除单链表的结点 有没有办法查得到各个村的村委会办公电话 我怎样查老家村委会的电话啊 怎样查外省的某一村委会的电话 怎样才能联系到四川省仪陇县、杨家沟四组村委会的联系方式 香菇怎么炒才能保持香味儿? 香菇怎么样才能入味 香菇怎么炒更香? 怎样做香菇才没有怪味道 香菇如何做更香 怎么打开proe工程图中的压缩文件? proe怎么解压 ProE5.0入门到精通DVD-1.zip这个文件怎么打开啊 proe4.0如何打开proe5.0的文件 解压是.prt.文件打不开 后缀名为neu的文件格式是怎么用proe4.0野火版程序打开? 在proe中,怎样才能使在打开时是自己想打开的文件夹 proe 5.0打开压缩包时提示对象是只读的,因为未将其检出。 网上下的PROE只有一个压缩文件,怎么安装? proe5.0 做完动画后保持了.fra 格式的文件,然后再怎么用proe打开
  • 焦点

最新推荐

猜你喜欢

热门推荐