要求删除顺序表中所有元素值为x的元素
时间: 2024-09-16 18:06:14 浏览: 64
要从顺序表(数组或链表)中删除所有值为 `x` 的元素,你可以根据顺序表的具体实现采取不同的策略。这里我会分别介绍两种常见的情况:
### 1. 数组实现
**遍历数组并删除元素:**
```cpp
template <typename T>
void removeDuplicates(T arr[], int& size, const T& x) {
// 遍历数组,找到第一个不等于x的位置
for (int i = 0; i < size; ++i) {
if (arr[i] != x) {
// 如果找到不等于x的元素,用这个位置替换后面的元素
memmove(&arr[i], &arr[i + 1], sizeof(arr[0]) * (size - i - 1));
size--;
break; // 已经找到了第一个非x元素,无需再检查
}
}
}
```
**使用标准库算法(C++17以后):**
```cpp
template <typename T>
void removeDuplicates(T& arr, T x) {
auto it = std::remove_if(arr.begin(), arr.end(), [x](const T& value) { return value == x; });
arr.resize(std::distance(arr.begin(), it));
}
```
### 2. 链表实现
**遍历链表并删除节点:**
```cpp
struct Node {
int data;
Node* next;
};
void deleteElements(Node*& head, int x) {
Node* prev = nullptr;
Node* curr = head;
while (curr != nullptr) {
if (curr->data == x) {
if (prev == nullptr) {
head = curr->next;
} else {
prev->next = curr->next;
}
delete curr;
curr = prev->next;
} else {
prev = curr;
curr = curr->next;
}
}
}
```
在上述代码中,我们遍历列表,当遇到值为 `x` 的节点时,将其从列表中移除并释放内存。
阅读全文