#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
// 定义单链表的结点结构
struct LinkList {
int data; // 数据域
struct LinkList* next; // 指针域
};
// 创建单链表
LinkList* createLinkList(int arr[], int n) {
LinkList* head = NULL;
LinkList* tail = NULL;
for (int i = 0; i < n; i++) {
LinkList* newNode = (LinkList*)malloc(sizeof(LinkList));
newNode->data = arr[i];
newNode->next = NULL;
if (head == NULL) {
head = newNode;
tail = newNode;
}
else {
tail->next = newNode;
tail = newNode;
}
}
return head;
}
// 删除单链表中数据域最大的结点
LinkList* deleteMaxNode(LinkList* head) {
if (head == NULL) {
return NULL;
}
LinkList* maxNode = head;
LinkList* prevNode = NULL;
LinkList* temp = head;
while (temp->next != NULL) {
if (temp->next->data > maxNode->data) {
maxNode = temp->next;
prevNode = temp;
}
temp = temp->next;
}
if (maxNode == head) {
head = head->next;
}
else {
prevNode->next = maxNode->next;
}
free(maxNode);
return head;
}
// 输出单链表
void printLinkList(LinkList* head) {
LinkList* temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
int main() {
int arr[] = { 1, 2, 3, 6, 4 };
int n = sizeof(arr) / sizeof(arr[0]);
LinkList* head;
head = createLinkList(arr, n);
printf("原始链表:");
printLinkList(head);
head = deleteMaxNode(head);
printf("删除最大结点后的链表:");
printLinkList(head);
return 0;
}