给定头结点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;}
........
}