```cpp
//按位序删除(带头结点)
bool ListDelete(LinkList &L, int i, ElemType &e) {
if (i < 1)
return false;
//LNode *p = GetElem(L, i - 1);//找到第i-1个节点
LNode *p;//指针p指向当前扫描的节点
int j = 0;//当前p指向的是第几个节点
p = L;//L指向头结点,头结点是第0个节点(不存数据)
while (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;//令e返回元素的值
p->next = q->next;//将*q节点从链中“断开”
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;//将q节点从中间断开
free(q);//释放q节点
return true;
}```
09-19
1272