用c++写出程序:删除单链表中第一个最大值的结点,并显示删除前后结果。说明: 从键盘分别输入单链表长度n、和每个结点存储的数值,利用尾插法构建此单链表,编写算法删除单链表中第一个最大值的结点,并显示删除前后单链表内容。
时间: 2024-09-26 09:03:36 浏览: 33
首先,我们需要创建一个简单的单链表结构体,包含节点的数据和指向下一个节点的指针。然后我们可以按照题目描述的操作步骤来完成这个任务。
```cpp
#include <iostream>
using namespace std;
// 定义链表节点
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
// 尾插法添加节点到链表
ListNode* append(ListNode* head, int val) {
ListNode* newNode = new ListNode(val);
if (head == nullptr) {
head = newNode;
} else {
ListNode* temp = head;
while (temp->next != nullptr) {
temp = temp->next;
}
temp->next = newNode;
}
return head;
}
// 找到并删除最大值节点
ListNode* deleteMax(ListNode* head) {
if (head == nullptr || head->next == nullptr) {
return head;
}
ListNode* maxNode = head; // 当前最大值节点
for (ListNode* node = head->next; node != nullptr; node = node->next) {
if (node->val > maxNode->val) {
maxNode = node;
}
}
if (maxNode == head) { // 如果头节点就是最大值,直接删除头节点
ListNode* temp = head->next;
delete head;
head = temp;
} else {
maxNode->next = maxNode->next->next;
}
return head;
}
// 显示链表内容
void printList(ListNode* head) {
while (head != nullptr) {
cout << head->val << " ";
head = head->next;
}
cout << endl;
}
int main() {
int n;
cout << "请输入链表长度:";
cin >> n;
ListNode* head = nullptr;
for (int i = 0; i < n; ++i) {
int val;
cout << "请输入第" << (i + 1) << "个元素:";
cin >> val;
head = append(head, val);
}
cout << "删除前链表:";
printList(head);
head = deleteMax(head);
cout << "删除后链表:";
printList(head);
return 0;
}
```
运行以上代码后,用户会先输入链表的长度,然后依次输入每个节点的值,最后会看到删除前后的链表内容。注意,如果链表只有一个元素,该元素将被删除。
阅读全文