链表的输入设计算法,要求删除有序链表中数据值大于min小于max的所有元素。 int Deletelist(Sqlist La, int min, int max) { }
时间: 2024-10-08 14:24:13 浏览: 38
在设计一个算法用于删除有序链表中数据值大于`min`且小于`max`的所有元素时,可以采取迭代或递归的方式。这里是一个基于迭代的简单步骤:
```cpp
#include <iostream>
// 定义链表节点结构体
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
ListNode* deleteElements(ListNode* head, int min, int max) {
// 如果链表为空,直接返回
if (head == nullptr) return nullptr;
ListNode* current = head; // 当前节点指针
ListNode* prev = nullptr; // 上一个节点指针
while (current != nullptr) {
// 如果当前节点的值不在给定范围内
if (current->val < min || current->val > max) {
// 如果上一个节点存在,连接上一个节点和下一个节点
if (prev != nullptr) {
prev->next = current->next;
} else {
// 如果这是第一个节点,更新头节点为下一个有效节点
head = current->next;
}
// 释放当前节点
delete current;
} else {
// 否则,将上一个节点指向当前节点,继续遍历
prev = current;
}
current = current->next;
}
return head;
}
int main() {
// 示例链表:1, 2, 3, 4, 5, 6, 7, 8
ListNode* list = new ListNode(1);
list->next = new ListNode(2);
list->next->next = new ListNode(3);
// ...添加更多节点...
list = deleteElements(list, 4, 6); // 删除范围内的元素
// 打印剩余链表(示例输出:1, 2, 7, 8)
while (list != nullptr) {
std::cout << list->val << " ";
list = list->next;
}
return 0;
}
```
阅读全文