在单链表中,增加一个函数void DelElem(SLinkNode *&L,ElemType x):删除单链表中所有值为x的元素
时间: 2024-10-12 16:08:50 浏览: 55
在单链表中,`DelElem` 函数的主要目的是从给定的链表 `L` 中删除所有值为 `x` 的元素。`SLinkNode *&L` 表示链表的头结点的引用,`ElemType x` 是需要查找并删除的具体元素类型。这里的关键步骤包括:
1. **初始化指针**:创建两个指针,一个指向当前节点(`current`),另一个作为已删除节点的前驱(`prev`)。
2. **遍历链表**:当 `current` 指向非空节点并且节点的值等于 `x` 时,执行删除操作。
a. **删除当前节点**:将 `current->next` 设置为 `current->next` 的下一个节点,然后释放 `current` 所占用的空间(`delete current`)。如果这是第一个节点(即 `prev` 为空),则更新头结点为下一个节点。
b. **移动指针**:`prev` 和 `current` 向后移动一位,继续检查下一个节点。
3. **结束遍历**:当 `current` 为 nullptr 或其值不等于 `x` 时,说明链表中不再有值为 `x` 的元素,或者已经遍历到链表末尾。
以下是这个函数的一个简化的伪代码实现:
```cpp
void DelElem(SLinkNode *&L, ElemType x) {
SLinkNode *current = L;
SLinkNode *prev = nullptr;
while (current != nullptr && current->data == x) {
if (prev == nullptr) {
L = current->next; // 如果当前是头节点
} else {
prev->next = current->next;
}
delete current;
prev = current;
current = current->next;
}
}
```
阅读全文