C语言数据结构_查找并删除单链表中最大值结点并返回值
代码实现
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef struct Node // 定义一个结构体 5 { 6 float data; 7 struct Node *next; 8 } Node; 9 10 Node *Chuangzao_LinkedList() // 创建一个链表 11 { 12 Node *head = NULL; // 定义头指针 13 Node *tail = NULL; // 定义尾指针 14 /*并初始为null*/ 15 float Yuan_Su; // 定义元素 16 printf("请输入多个整数(用空格分开,并以-1结束):\n"); 17 while (1) 18 { 19 scanf("%f", &Yuan_Su); // 循环输入元素 20 21 if (Yuan_Su == -1) 22 { 23 break; // 输入-1,退出循环 24 } 25 26 Node *newNode = (Node *)malloc(sizeof(Node)); // 创建新结点,用malloc分配内存 27 newNode->data = Yuan_Su; 28 newNode->next = NULL; 29 30 if (head == NULL) // 如果为头为空 31 { 32 head = newNode; // 指向新结点 33 tail = newNode; 34 } 35 else 36 { 37 tail->next = newNode; // 插入链表尾部 38 tail = newNode; // 更新指针 39 } 40 } 41 42 return head; 43 } 44 45 float Shanchu_MaxNode(Node **head) // 定义删除链表最大值的函数 46 { 47 if (*head == NULL) 48 { 49 printf("链表为空!"); 50 return -1; 51 } 52 53 Node *Dang_qian = *head; // 当前结点为头 54 Node *maxNode = NULL; // 最大结点和当前结点前一个为空 55 Node *Qian_yige = NULL; 56 float maxValue = Dang_qian->data; 57 58 while (Dang_qian != NULL && Dang_qian->next != NULL) 59 { 60 if (Dang_qian->next->data > maxValue) 61 { 62 maxValue = Dang_qian->next->data; 63 maxNode = Dang_qian; 64 Qian_yige = maxNode; 65 } 66 else 67 { 68 Dang_qian = Dang_qian->next; 69 } 70 } 71 72 if (maxNode == NULL) 73 { 74 maxNode = *head; 75 *head = (*head)->next; 76 } 77 else 78 { 79 maxNode = maxNode->next; 80 Qian_yige->next = maxNode->next; 81 } 82 83 float maxData = maxNode->data; 84 free(maxNode); 85 return maxData; 86 } 87 88 void printLinkedList(Node *head) 89 { 90 if (head == NULL) 91 { 92 return; 93 } 94 printLinkedList(head->next); 95 printf(" %.2f->", head->data); 96 } 97 98 int main() 99 { 100 Node *head = Chuangzao_LinkedList(); 101 float maxData = Shanchu_MaxNode(&head); 102 printf("删除的最大值为:%.2f\n", maxData); 103 printf("删除链表最大的值后,链表的值如下:\n"); 104 printLinkedList(head); 105 printf("\n"); 106 system("pause"); // vscode中加入可以使cmd可以保留在屏幕上,删除则会一闪而过 107 return 0; 108 }
测试结果