按位序删除结点
typedef struct LNode{
int data;
struct LNode *next;
}LNode, *LinkList;
bool ListDelete(LinkList &L, int i, int &e){
if(i<1)
return false;
LNode *p; //指针p指向当前扫描到的结点
int j=0; //当前p指向的是第几个结点
p = L; //L指向头结点
while(p!=NULL && j<i-1){
p = p->next;
j++;
}
if(p == NULL)
return false;
if(p->next == NULL)
return false;
LNode *q=p->next; //令q指向被删除结点
e = q->data; //用e返回元素的值
p->next = q->next; //将*q结点从链中断开
free(q); //删除结点的存储空间
return true;
}
指定结点的删除
bool DeleteNode(LNode *p){
if(p == NULL)
return false;
LNode *q = p->next; //令p指向*p的后继结点
p->data = p->next->data; //和后继结点交换数据域
p->next = q->next; //将*q结点从链中断开
free(q); //释放后续结点的存储空间
return true;
}
//核心思想:将p结点后的q结点的数据复制给p结点,再将q结点删除。
//缺点:当删除的是最后一个结点时,p->data = p->next->data有误。