ListDelete(&L,i,&e):删除操作。删除表L中第i个位置的元素,并用e返回删除元素的值。
方法:找到第i-1个结点,将其指针指向第i+1个结点,并释放第i个结点。
头结点可以看作第0个结点。
假如我们要删除第一个结点:
代码实现:
//咸鱼学长版
bool ListDelete(LinkList& L, int i, ElemType& e) {
if (i < 1) {
return false;
}
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;
e = q->data;
p->next = q->next;
free(q);
return true;
}