一.带头结点按位序删除
删除单链表第i个位置,用e返回删除的元素。同插入一样找到第i-1个结点。
bool DeleteList(LinkList &L,int i,int &e){ //注意这里e是引用,因为要返回到函数的调用者处
if(i<1)
return false;
LNode *p;
p=L;
for(int j=0;j<i-1&&p!=NULL;j++){
p=p->next;
}
if(p==NULL)
return false;
if(p->next==NULL)
return false; //注意删除结点还要考虑第i-1结点后面是否有结点
LNode *s; //指针s指向被删除结点
e=s->data;
p->next=s->next;
free(s);
return true;
}
二.指定结点的删除
我认为较难需要多看。
bool DeleteNode(LNode *p){
if(p==NUll)
return false;
LNode *s;
s=p->next;
p->data=p->next->data; //类似前面前插时的偷天换日法
p->next=s->next;
free(s);
return ture;
}
当删除最后一个结点的时候不适用,会出现空指针。