0(1)时间删除带头节点单链表指定节点。
2015-05-27 01:56
162 查看
给定头结点Phead,节点指针Pnode,O(1)常数时间删除该节点。
通常需要遍历到Pnode的前一个节点。然后删除它。但这样的复杂度是O(n)
1.把Pnode的下一个节点的内容覆盖Pnode节点的内容,然后删除下一个节点。O(1)
2.有可能这种情况:Pnode指向的是最后一个节点,怎么办?这种情况只能从头到尾查找。O(n) 但是平均下来是O(1)的 略坑。
3.Phead和Pnode为空时;只有一个节点时候;
typedef struct LNode
{
int data;
struct LNode *next;
} LNode;
void deleteLNode(LNode
*&Phead ,LNode *Pnode)
{
if(Phead==null || Pnode==null) return ;
//只有头结点
if(Phead ==Pnode) {delete Phead; Phead=Pnode=null;}
........
}
通常需要遍历到Pnode的前一个节点。然后删除它。但这样的复杂度是O(n)
1.把Pnode的下一个节点的内容覆盖Pnode节点的内容,然后删除下一个节点。O(1)
2.有可能这种情况:Pnode指向的是最后一个节点,怎么办?这种情况只能从头到尾查找。O(n) 但是平均下来是O(1)的 略坑。
3.Phead和Pnode为空时;只有一个节点时候;
typedef struct LNode
{
int data;
struct LNode *next;
} LNode;
void deleteLNode(LNode
*&Phead ,LNode *Pnode)
{
if(Phead==null || Pnode==null) return ;
//只有头结点
if(Phead ==Pnode) {delete Phead; Phead=Pnode=null;}
........
}
相关文章推荐
- 算法面试之道:在O(1)的时间内删除单链接链表的指定节点
- 删除链表中指定节点,要求时间复杂度为O(1)
- 如何在O(1)时间删除链表指定节点(Java实现)
- 数据结构之链表面试题汇总(四)得到两个单链表相交的第一个交点、用O(1)的时间效率删除单向链表中的指定节点
- 数据结构:单链表(二)之链表节点排序,升序插入数据,删除指定的所有节点,翻转链表操作
- 数据结构和算法设计专题之---单链表中在指定的节点前面插入以及删除一个节点
- 在O(1)时间复杂度删除链表节点
- 华为OJ:从单向链表中删除指定值的节点
- 作业3.372:在O(1)时间复杂度删除链表节点
- lintcode——在O(1)时间复杂度删除链表节点
- 在O(1)时间复杂度删除链表节点
- 面试题13:在O(1)时间删除链表节点
- 在O(1)时间复杂度删除链表节点
- 用O(1)的时间复杂度删除单链表中的某个节点
- 华为机试-从单链表中删除指定值的节点
- 在单链表中删除指定值的节点
- 用O(1)的时间复杂度删除单链表中的某个节点
- 单链表的删除指定节点解析
- 删除单向链表的指定节点