用c++编一个程序:已知一个不带头结点的单链表head中存放了一组整型数(自己输入五个数),构造算法,删除链表中值最大的结点。
时间: 2024-09-12 15:05:16 浏览: 73
要用C++编写一个程序,首先需要定义单链表节点的数据结构,然后实现创建链表和删除最大节点的算法。下面是一个简单的示例代码,展示了如何实现这个功能:
```cpp
#include <iostream>
// 定义单链表节点结构体
struct ListNode {
int val; // 节点存储的数据
ListNode *next; // 指向下一个节点的指针
// 构造函数
ListNode(int x) : val(x), next(nullptr) {}
};
// 创建链表函数,输入为一组整数
ListNode* createList(std::initializer_list<int> vals) {
ListNode *head = nullptr, *tail = nullptr;
for (int val : vals) {
if (!head) {
head = tail = new ListNode(val);
} else {
tail->next = new ListNode(val);
tail = tail->next;
}
}
return head;
}
// 删除链表中最大节点的函数
void deleteMaxNode(ListNode*& head) {
if (!head) return;
ListNode *maxPrev = nullptr, *cur = head, *maxNode = head;
ListNode *prev = nullptr, *next = nullptr;
while (cur->next) {
prev = cur;
cur = cur->next;
if (cur->val > maxNode->val) {
maxNode = cur;
maxPrev = prev;
}
}
// 删除最大节点
if (maxNode == head) {
head = head->next;
} else {
maxPrev->next = maxNode->next;
}
delete maxNode; // 释放内存
}
// 打印链表函数
void printList(ListNode* head) {
while (head) {
std::cout << head->val << " ";
head = head->next;
}
std::cout << std::endl;
}
// 清理链表内存函数
void freeList(ListNode*& head) {
ListNode *cur = head, *next;
while (cur) {
next = cur->next;
delete cur;
cur = next;
}
head = nullptr;
}
int main() {
// 创建一个包含五个数的链表
ListNode* head = createList({5, 3, 2, 4, 1});
std::cout << "原链表: ";
printList(head);
// 删除值最大的节点
deleteMaxNode(head);
std::cout << "删除最大值后链表: ";
printList(head);
// 清理链表内存
freeList(head);
return 0;
}
```
在这个程序中,我们首先定义了一个`ListNode`结构体来表示链表的节点,并实现了`createList`函数来根据输入的整数列表创建链表。`deleteMaxNode`函数用于删除链表中的最大节点。`printList`函数用于打印链表中的所有节点,而`freeList`函数用于释放链表占用的内存。
阅读全文