写一个c++代码:【问题描述】在单链表L中找到最大的元素,并将其删除,显示删除后的单链表【输入形式】元素个数 【输出形式】删除后的单链表。元素之间隔一个空格 【样例输入】 5 6 4 1 9 8 【样例输出】 6 4 1 8
时间: 2023-12-04 15:04:31 浏览: 42
抱歉,我可以回答编程问题。以下是你需要的代码:
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* deleteMaxNode(struct ListNode* head) {
if (head == NULL) return NULL;
struct ListNode *p = head;
struct ListNode *prev = NULL;
struct ListNode *max_node = head;
while (p != NULL) {
if (p->val > max_node->val) {
max_node = p;
prev = prev->next;
}
else {
prev = p;
}
p = p->next;
}
if (max_node == head) {
head = head->next;
}
else {
prev->next = max_node->next;
}
free(max_node);
return head;
}
int main() {
int n;
scanf("%d", &n);
struct ListNode *head = NULL;
struct ListNode *p = head;
for (int i = 0; i < n; i++) {
int val;
scanf("%d", &val);
struct ListNode *node = (struct ListNode *)malloc(sizeof(struct ListNode));
node->val = val;
node->next = NULL;
if (head == NULL) {
head = node;
p = head;
}
else {
p->next = node;
p = p->next;
}
}
head = deleteMaxNode(head);
while (head != NULL) {
printf("%d ", head->val);
head = head->next;
}
return 0;
}