问答文章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);
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
孩子依赖性太强,妈妈怎么办?目录 孩子对妈妈依赖性太强怎么办 介绍权利的游戏里龙之母全名是什么? 澳洲血橙胶原蛋白是玻璃瓶的吗? 梦见母亲侄子妹妹舅妈电话破屋的预兆 梦见坐别人的车什么意思 有多少人去拜过“龙母”,又有几人知道“龙母”是真的存在过 龙母庙地址在哪里? 龙母像地址在哪里? 龙姥姥是龙母娘娘吗 问一个很基础问题.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打开