已知一个不带头结点的单链表head中存放了一组整形数,用c++构造算法,删除链表中值最大的结点。
时间: 2024-09-20 11:18:05 浏览: 81
在C++中,我们可以构建这样的算法来删除单链表中值最大的节点:
```cpp
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(nullptr) {}
};
// 定义辅助函数,用于找到当前链表中的最大值
int findMax(ListNode* head) {
if (head == nullptr) return INT_MIN; // 如果链表为空,返回最小整数
int max_val = head->val;
ListNode* current = head;
while (current != nullptr) {
if (max_val < current->val) {
max_val = current->val;
}
current = current->next;
}
return max_val;
}
// 删除最大值节点
ListNode* deleteMaxNode(ListNode* head) {
if (head == nullptr || head->next == nullptr) { // 如果链表只有一个元素或为空,直接返回nullptr
return nullptr;
}
int max_val = findMax(head);
ListNode* prev = nullptr;
ListNode* current = head;
while (current != nullptr && current->val == max_val) {
prev = current;
current = current->next;
}
if (prev == nullptr) { // 如果最大值节点就是头节点
head = current;
} else {
prev->next = current->next;
}
return head;
}
void printList(ListNode* head) {
ListNode* temp = head;
while (temp != nullptr) {
cout << temp->val << " ";
temp = temp->next;
}
cout << endl;
}
int main() {
// 创建一个示例链表
ListNode* list = new ListNode(5);
list->next = new ListNode(7);
list->next->next = new ListNode(4);
list->next->next->next = new ListNode(9);
cout << "Original list: ";
printList(list);
list = deleteMaxNode(list);
cout << "List after deleting max node: ";
printList(list);
return 0;
}
```
这个程序首先定义了一个`ListNode`结构体表示链表节点,并创建了两个辅助函数:`findMax`用于找到链表中的最大值,`deleteMaxNode`负责删除最大值节点。主函数中展示了如何创建链表并应用这个删除操作。
阅读全文