二、综合应用题
————————————————————
————————————————————
解法1:用p从头至尾扫描单链表,pre指向*p结点的前驱。若p所指结点的值为x,则删除,并让p移向下一个结点,否则让pre、p指针同步后移一个结点。
void Delete_x(LinkList& L, ElemType x) {
LNode *q;
LNode *pre = L;
// 如果链表为空,直接返回
if (L->next == NULL)
return;
LNode* p = L->next; // p指向第一个结点
while (p != NULL) {
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 指向下一个结点
}
}
}