C语言实现:在带头结点非空循环单链表首个最大结点前插入值为x结点的算法
以下是使用 C 语言实现的在带头结点的非空循环单链表中第一个最大结点之前插入一个值为 `x` 的结点的算法: ```c #include <stdio.h> #include <stdlib.h> // 定义链表节点结构体 typedef struct ListNode { int data; struct ListNode *next; } ListNode; // 创建新节点 ListNode *createNode(int data) { ListNode *newNode = (ListNode *)malloc(sizeof(ListNode)); if (newNode == NULL) { printf("内存分配失败\n"); return NULL; } newNode->data = data; newNode->next = NULL; return newNode; } // 插入节点 void insertBeforeMax(ListNode *head, int x) { ListNode *maxNode = head->next; ListNode *prevMax = head; ListNode *curr = head->next; ListNode *prev = head; // 找到最大节点和其前一个节点 while (curr!= head) { if (curr->data > maxNode->data) { maxNode = curr; prevMax = prev; } prev = curr; curr = curr->next; } // 创建新节点 ListNode *newNode = createNode(x); newNode->next = maxNode; prevMax->next = newNode; } // 打印链表 void printList(ListNode *head) { ListNode *curr = head->next; while (curr!= head) { printf("%d ", curr->data); curr = curr->next; } printf("\n"); } int main() { ListNode *head = createNode(0); // 头节点,数据域无意义 ListNode *node1 = createNode(10); ListNode *node2 = createNode(20); ListNode *node3 = createNode(15); head->next = node1; node1->next = node2; node2->next = node3; node3->next = head; // 形成循环链表 printf("原始链表: "); printList(head); int x = 30; insertBeforeMax(head, x); printf("插入后的链表: "); printList(head); // 释放链表内存 ListNode *temp; ListNode *curr = head; do { temp = curr; curr = curr->next; free(temp); } while (curr!= head); return 0; } ``` ######[AI写代码神器 | 629点数解答 | 2024-11-16 20:56:53]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)384
- 高考毕业晚会难题:从学生能力值求最大默契程度的Python解法(字节豆包 | 487点数解答 | 2026-01-24 13:10:18)60
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)501
- 用 JS 的 while 循环实现 1 到 100 相加并输出到页面的代码揭秘( | 47点数解答 | 2024-05-20 22:16:48)389
- C#工程师必知:数组、链表、哈希、队列、栈数据结构优缺点大揭秘! (百度文心 | 561点数解答 | 2023-11-09 17:56:30)280
- Java 实现仿 Windows 资源管理器:文件管理器功能全解析与代码示例(字节豆包 | 623点数解答 | 2025-01-01 14:59:04)271
- C++实现读取数字并输出最小值的代码及解释(字节豆包 | 113点数解答 | 2026-03-20 19:32:56)30
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)354
- C 语言实现单链表全功能操作:创建、增删查改与逆置测试( | 4796点数解答 | 2024-03-28 16:24:20)357
- C++实现顺序存储结构基本操作:初始化、插入、删除等全解析(GPT | 1743点数解答 | 2024-09-26 00:20:17)301
- C++实现单循环链表:初始化、插入、删除等操作及测试验证(GPT | 2102点数解答 | 2024-10-13 13:39:58)170
- Java 实现通用文件存储系统:含随机读写与空闲空间回收(字节豆包 | 686点数解答 | 2024-11-21 16:25:51)245