设计一个算法,删除不带头结点的单链表L中所有值为x的结点
时间: 2024-05-02 21:21:46 浏览: 101
实现在单链表中删去值相同的多余结点的算法.txt
算法如下:
1. 如果L为空,则直接返回。
2. 遍历L,找到第一个值为x的结点pre和其后继结点p。
3. 如果pre为空,则说明第一个结点就是要删除的结点,将L的头指针指向p,释放pre结点。
4. 如果pre不为空,则将pre的后继指针指向p,释放p结点。
5. 继续遍历L,直到找不到值为x的结点为止。
6. 返回L。
代码实现如下:
```
void deleteX(Node*& L, int x)
{
while (L != nullptr && L->val == x) {
Node* p = L;
L = L->next;
delete p;
}
if (L == nullptr) {
return;
}
Node* pre = L;
Node* p = L->next;
while (p != nullptr) {
if (p->val == x) {
pre->next = p->next;
delete p;
p = pre->next;
} else {
pre = p;
p = p->next;
}
}
}
```
阅读全文