//按位序删除(带头结点)
bool ListDelete(LinkList &L ,int i,int &e){
if(i<1)
return false;
LNode *p; //指针p指向当前扫描结点
int j=0; //当前p指向的是第几个结点
P=L; //L指向头结点,头结点是第0个结点,不存放数据
if(p!=NULL&&j<i-1){ //循环找到第i-1个结点
p=p->next;
j++;
}
if(P==NULL) //i值不合法
return false;
if(p->next==NULL) //第i-1个结点后已无其它结点
return false;
LNode*q=p->next; //令q指向被删除的结点
e=q->data;
p->next=q->next;
free(q);
return true;
}
//删除指定结点
bool DeleteNode(LNode *p){
if(p==NULL)
return false;
LNode *q=p->next; //令q指向*p的后继结点
p->data=p->next->data; //和后继结点交换数据域
p->next=q->next;
free(q);
return true;
}
//如果p结点是最后一个结点,则只能从表头开始依次寻找p的前驱 ,时间复杂度O(n)