当前位置: 首页 > news >正文

数据结构每日一题day18(链表)★★★★★

题目描述:试编写在带头结点的单链表L中删除一个最小值结点的高效算法(假设最小值结点唯一)。

算法思想:

  1. 初始化指针:创建两个指针prev和current,分别指向头结点和头结点的下一个节点。
  2. 遍历链表:遍历链表,寻找最小值节点及其前驱节点。
  3. 删除最小值节点:找到最小值节点后,通过修改前驱节点的next指针来删除最小值节点。
  4. 返回结果:返回删除后的链表。

复杂度分析:

时间复杂度:O(n )

空间复杂度:O(1)

代码实现:

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>// 定义单链表节点结构
typedef struct Node {int data;struct Node* next;
} Node;// 创建新节点
Node* createNode(int data) {Node* newNode = (Node*)malloc(sizeof(Node));if (newNode == NULL) {printf("Memory allocation failed.\n");exit(1);}newNode->data = data;newNode->next = NULL;return newNode;
}// 在带头结点的单链表中删除最小值节点
Node* deleteMin(Node* head) {Node* prev = head;          // 前驱节点指针Node* current = head->next; // 当前节点指针Node* minPrev = head;        // 最小值节点的前驱节点int minValue = INT_MAX;      // 最小值初始化为最大整数// 遍历链表,寻找最小值节点及其前驱节点while (current != NULL) {if (current->data < minValue) {minValue = current->data;minPrev = prev;}prev = current;current = current->next;}// 删除最小值节点if (minPrev != NULL && minPrev->next != NULL) {Node* temp = minPrev->next;minPrev->next = temp->next;free(temp);}return head;
}// 打印链表
void printList(Node* head) {Node* current = head->next; // 跳过头结点while (current != NULL) {printf("%d ", current->data);current = current->next;}printf("\n");
}// 测试代码
int main() {// 创建带头结点的链表: head->1->3->5->2->4Node* head = createNode(0); // 头结点,数据域不使用head->next = createNode(1);head->next->next = createNode(3);head->next->next->next = createNode(5);head->next->next->next->next = createNode(2);head->next->next->next->next->next = createNode(4);printf("Original list: ");printList(head);// 删除最小值节点head = deleteMin(head);printf("List after deleting min: ");printList(head);// 释放内存(简单起见,这里不实现完整的释放逻辑)return 0;
}

http://www.xdnf.cn/news/362881.html

相关文章:

  • 在自然语言处理任务中,像 BERT 这样的模型会在输入前自动加上一些特殊token
  • MCP(Model Context Protocol)是专为LLM(大语言模型)应用设计的标准化协议
  • CKESC STONE 200A-M 工业级电调技术测评:全场景适配的动力控制核心
  • 【谭浩强】第七章第14题
  • 【C语言】--指针超详解(三)
  • Qwen智能体qwen_agent与Assistant功能初探
  • 昆仑万维一季度营收增长46% AI业务成新增长点
  • epoch、batch size和steps_per_epoch的区别
  • Linux 大于2T磁盘分区
  • FPGA 41 ,ICMP 协议详细解析之构建网络诊断系统( ICMP 协议与 IP 协议理论详细解析 )
  • windows下,docker虚拟化使用nginx镜像部署vue3+vite项目
  • 数据库基础:概念、原理与实战示例
  • 多账号管理与自动化中的浏览器指纹对抗方案
  • 北斗导航 | RTKLib中重难点技术,公式,代码
  • 【质量管理】TRIZ因果链分析:解码质量问题的“多米诺效应“
  • 20250509——TOPSIS计算各方案得分
  • 怎么判断是不是公网IP?如何查看自己本地路由器是内网ip还是公网?
  • Lightweight App Alternatives
  • gpu硬件,gpu驱动,cuda,CUDA Toolkit,cudatoolkit,cudnn,nvcc概念解析
  • python---kafka常规使用
  • awesome-digital-human本地部署及配置:打造高情绪价值互动指南
  • Conda激活环境无效
  • 【星海随笔】信息安全相关标准
  • 江西同为科技有限公司受邀参展2025长江流域跨博会
  • 智芯Z20K144x MCU开发之时钟架构
  • 数字人肢体动作控制:从基础原理到实践路径!
  • PostgreSQL可见性映射VM
  • 3D模型格式转换组件HOOPS Exchange:高效赋能航空航天设计协同、数据一致!
  • Uniapp app 安卓手机(红米)自定义基座进行真机调试
  • 编译原理实验 之 语法分析程序自动生成工具Yacc实验