您的位置:首页 > 其它

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;}

     ........

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: