题目描述:在带头结点的单链表L中,删除所有值为x的结点,并释放其空间,假设值为x的结点不唯一,编写算法实现上述操作。
void Delete(LinkList &L, ElemType x) {
LNode *q;
LNode *pre = L;
// 如果链表为空,直接返回
if (L->next == NULL)
return;
LNode *p = L->next; // p指向第一个结点
while (p) {
if (p->data == x) {
q = p; // 将找到的结点保存在临时变量 q 中
p = p->next; // p 指向下一个结点
pre->next = p; // 修改前一个结点的指针,跳过 q
free(q); // 释放 q 的内存
} else {
pre = p; // pre 指向当前结点 p
p = p->next; // p 指向下一个结点
}
}
}