用c++写出1.有一个整数单链表L,设计一个算法删除其中所有值为x的结点。 例如:L=(1,2,,2,3,1) 删除 x=2 后 L=(1,3,1)
时间: 2024-10-06 11:06:11 浏览: 0
在 C++ 中,你可以通过遍历链表并检查每个节点的值是否等于目标值 `x` 来删除所有值为 `x` 的节点。这里是一个简单的算法实现:
```cpp
#include <iostream>
using namespace std;
// 定义链表节点结构体
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
// 函数来删除链表中值为 x 的节点
ListNode* removeElements(ListNode* head, int x) {
// 如果头节点就是需要删除的,则返回下一个节点
if (head && head->val == x) {
head = head->next;
}
// 遍历链表
ListNode* current = head;
while (current != NULL) {
// 如果当前节点值等于x,则跳过它并更新指针
if (current->val == x) {
ListNode* temp = current;
current = current->next;
delete temp;
} else {
// 否则继续指向下一个节点
current = current->next;
}
}
return head;
}
int main() {
// 创建示例链表
ListNode* list = new ListNode(1);
list->next = new ListNode(2);
list->next->next = new ListNode(2);
list->next->next->next = new ListNode(3);
list->next->next->next->next = new ListNode(1);
// 删除值为 2 的节点
list = removeElements(list, 2);
// 打印处理后的链表
while (list != NULL) {
cout << list->val << " ";
list = list->next;
}
return 0;
}
```
当你运行这个程序后,输出将是 `1 3 1`。