刷题笔记:力扣第707题-设计链表
1.本题是一道链表综合性题目基本上将链表的所有操作全都考察了一遍以下是写出的完整代码1. typedef struct MyLinkedList{ 2. int val; 3. struct MyLinkedList* next; 4. } MyLinkedList; 5. 6. // 创建链表初始化虚拟头节点 7. MyLinkedList* myLinkedListCreate() { 8. // 分配虚拟头节点内存 9. struct MyLinkedList* dummyHead (struct MyLinkedList*)malloc(sizeof(struct MyLinkedList)); 10. // 初始链表无有效节点虚拟头后继置空 11. dummyHead-next NULL; 12. return dummyHead; 13. } 14. 15. // 获取下标index位置节点的值无节点返回-1 16. int myLinkedListGet(MyLinkedList* obj, int index) { 17. // cur指向第一个真实节点 18. struct MyLinkedList* cur obj-next; 19. // 循环移动index次到达目标下标 20. for (int i 0; i index; i){ 21. // 中途链表断裂下标越界直接返回-1 22. if (cur NULL){ 23. return -1; 24. } 25. cur cur-next; 26. } 27. // 循环结束cur为空说明下标不存在返回-1否则返回节点值 28. return cur NULL ? -1 : cur-val; 29. } 30. 31. // 在链表头部插入节点 32. void myLinkedListAddAtHead(MyLinkedList* obj, int val) { 33. // 新建待插入节点 34. struct MyLinkedList* newHead (struct MyLinkedList*)malloc(sizeof(struct MyLinkedList)); 35. // 新节点后继指向原第一个有效节点 36. newHead-next obj-next; 37. // 设置节点存储数值 38. newHead-val val; 39. // 虚拟头指向新节点完成头插 40. obj-next newHead; 41. } 42. 43. // 在链表尾部插入节点 44. void myLinkedListAddAtTail(MyLinkedList* obj, int val) { 45. // 创建新尾节点 46. struct MyLinkedList* newTail (struct MyLinkedList*)malloc(sizeof(struct MyLinkedList)); 47. // 遍历指针从虚拟头出发 48. struct MyLinkedList* cur obj; 49. // 循环找到链表最后一个节点 50. while (cur-next ! NULL){ 51. cur cur-next; 52. } 53. // 尾节点后继为空 54. newTail-next NULL; 55. newTail-val val; 56. // 原尾节点连接新节点 57. cur-next newTail; 58. } 59. 60. // 在下标index位置插入节点 61. void myLinkedListAddAtIndex(MyLinkedList* obj, int index, int val) { 62. // 遍历指针从虚拟头开始 63. struct MyLinkedList* cur obj; 64. // 移动index次找到插入位置的前驱节点 65. for (int i 0; i index; i){ 66. // 中途指针为空下标非法直接退出 67. if (cur NULL){ 68. return; 69. } 70. cur cur-next; 71. } 72. // 前驱为空无插入位置直接返回 73. if (cur NULL){ 74. return; 75. } else { 76. // 新建插入节点 77. struct MyLinkedList* newNode (struct MyLinkedList*)malloc(sizeof(struct MyLinkedList)); 78. // 新节点连接原index位置节点 79. newNode-next cur-next; 80. newNode-val val; 81. // 前驱节点指向新节点完成插入 82. cur-next newNode; 83. } 84. 85. } 86. 87. // 删除下标index位置的节点 88. void myLinkedListDeleteAtIndex(MyLinkedList* obj, int index) { 89. // 遍历指针从虚拟头出发 90. struct MyLinkedList* cur obj; 91. // 移动index次找到待删节点的前驱 92. for (int i 0; i index; i){ 93. // 指针为空下标非法直接退出 94. if (cur NULL){ 95. return; 96. } 97. cur cur-next; 98. } 99. // 前驱为空 / 前驱无后继说明目标节点不存在直接返回 100. if (cur NULL || cur-next NULL){ 101. return; 102. } else { 103. // 保存待删除节点地址 104. struct MyLinkedList* del cur-next; 105. // 前驱跳过待删节点重新连接链表 106. cur-next cur-next-next; 107. // 释放被删除节点内存 108. free(del); 109. } 110. } 111. 112. // 释放整个链表所有节点内存 113. void myLinkedListFree(MyLinkedList* obj) { 114. // cur指向第一个真实节点 115. struct MyLinkedList* cur obj-next; 116. // 循环销毁每一个有效节点 117. while (cur ! NULL){ 118. // 缓存当前待释放节点 119. struct MyLinkedList* del cur; 120. // 指针先后移防止断链丢失后续节点 121. cur cur-next; 122. free(del); 123. } 124. // 最后释放虚拟头节点 125. free(obj); 126. } 127. 128. /** 129. * Your MyLinkedList struct will be instantiated and called as such: 130. * MyLinkedList* obj myLinkedListCreate(); 131. * int param_1 myLinkedListGet(obj, index); 132. 133. * myLinkedListAddAtHead(obj, val); 134. 135. * myLinkedListAddAtTail(obj, val); 136. 137. * myLinkedListAddAtIndex(obj, index, val); 138. 139. * myLinkedListDeleteAtIndex(obj, index); 140. 141. * myLinkedListFree(obj); 142. */2.本道题目思想不难难点在于诸多小细节所以花费了很长时间下面是一些心得1能使用虚拟头结点就使用虚拟头结点这样能简化许多操作。2指针越界问题一定要注意在移动cur指针的时候考虑要所有的情况例如链表没有任何节点的特殊情况这时候使用虚拟头结点就能保证至少有一个真实节点代码就会更容易写出来。3执行链表全部删除操作时不要忘记释放虚拟头结点的空间。4当需要修改链表结构插入、删除时一般令cur dummyHead因为需要拿到index的上一个节点而0号节点的上一个节点正是dummyHead。5当只需要读取数据不改变链表结构时一般令cur dummyHead-next因为只关心真实节点中的数值。

相关新闻

08-C语言学习-字符串数组,二维整形数组

08-C语言学习-字符串数组,二维整形数组

两个if,两个if互不干扰,并行判断;if与else if只会触发其中一个 一维字符型数组C语言没有字符串型数据,操作和存储字符串要使用字符型数组来进行。定义:数据类型 数组名[元素个数] { }; char str[] "hello worl…

2026/7/29 6:40:49 阅读更多 →
固定资产管理系统技术演进解析:台账架构、标签打印、盘点模式、维保体系与信创迭代史

固定资产管理系统技术演进解析:台账架构、标签打印、盘点模式、维保体系与信创迭代史

固定资产管理系统的迭代,核心是从「财务账务导向」向「实物全生命周期管控导向」的技术重构,涵盖台账架构、标签打印机制、资产盘点模式、维保运维体系、部署架构、国产化适配多维度升级。早期固定资产管控依赖财务软件附属模块,台账结构固化…

2026/7/29 6:40:49 阅读更多 →
雅思笔试取消?打字慢的我该怎么解决

雅思笔试取消?打字慢的我该怎么解决

雅思笔试取消?打字慢的我该怎么解决 雅思笔试逐步取消、全面转向机考,已经成为不少考生绕不开的现实。曾经靠"手写快、字迹工整"拿高分的策略正在失效,取而代之的是屏幕阅读与键盘输入能力。对于习惯纸笔作答的同学来说&#xff0…

2026/7/29 6:40:49 阅读更多 →

最新新闻

WPF控件颜色绑定:直接绑定与值转换器绑定的核心原理与实战

WPF控件颜色绑定:直接绑定与值转换器绑定的核心原理与实战

1. 项目概述:为什么控件颜色绑定是WPF开发的核心技能如果你做过WPF项目,肯定遇到过这样的场景:界面上有个按钮,需要根据后台某个状态(比如“在线”、“离线”、“告警”)动态改变颜色。新手的第一反应可能是…

2026/7/29 6:53:54 阅读更多 →
从C到C++:面向对象编程与核心特性解析

从C到C++:面向对象编程与核心特性解析

1. 从C到C:思维模式的转变与核心概念引入很多从C语言转向C的朋友,初期最大的困惑往往不是语法,而是思维模式。C语言是过程式的,我们思考的是“如何一步步操作数据”。而C引入了面向对象(OOP)和泛型编程&…

2026/7/29 6:53:54 阅读更多 →
C语言爱心代码全解析:从数学原理到动态实现

C语言爱心代码全解析:从数学原理到动态实现

1. 项目概述:从一行代码到一颗“心”最近在技术社区和社交媒体上,又看到不少朋友在分享那个经典的“爱心代码”。没错,就是那个用C或C写的,在控制台里打印出一个由字符组成的爱心图案的程序。这玩意儿看似简单,甚至有点…

2026/7/29 6:53:54 阅读更多 →
Spec Coding:从氛围编程到规约编程的工程化演进

Spec Coding:从氛围编程到规约编程的工程化演进

Spec Coding:从氛围编程到规约编程的工程化演进 Vibe Coding让开发者体验到了自然语言驱动开发的魔力,但也暴露了一个根本性问题:模糊的需求描述极易触发AI的幻觉,导致生成代码偏离预期。2026年,行业正在从Vibe Coding…

2026/7/29 6:53:54 阅读更多 →
STM32标准库深度解析:从工程搭建到外设驱动与进阶优化

STM32标准库深度解析:从工程搭建到外设驱动与进阶优化

1. 项目概述:为什么我们还在聊STM32标准库?如果你刚接触STM32,或者是从Arduino、51单片机转过来的朋友,第一次打开Keil或者IAR的工程,看到那一堆以stm32f10x_开头的.c和.h文件,可能会有点懵。这就是我们今天…

2026/7/29 6:53:54 阅读更多 →
Python脚本运行全解析:从命令行到IDE,掌握核心方法与避坑指南

Python脚本运行全解析:从命令行到IDE,掌握核心方法与避坑指南

1. 项目概述:从“跑起来”开始刚接触Python那会儿,我踩的第一个坑不是语法,而是怎么让写好的代码“跑起来”。你可能会觉得这有什么难的,双击不就行了?但现实是,一个简单的hello.py文件,在不同的…

2026/7/29 6:52:54 阅读更多 →

日新闻

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:00:23 阅读更多 →
AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础 在上一期「AI编程系列」中,我们学习了如何构建一个基础的 AI 问答系统,通过简单的输入输出让模型回应问题。但现实世界中的 AI 应用往往需要处理更复杂的场景:…

2026/7/29 0:00:23 阅读更多 →
AI智能体开发实战:从工具调用到企业级部署

AI智能体开发实战:从工具调用到企业级部署

1. 从被动问答到主动执行:AI Agent的范式转变过去两年,大语言模型最显著的应用形态是聊天机器人——用户提问,AI回答。但真正的生产力革命发生在2023年下半年:当AI学会主动调用工具完成任务时,生产力工具的历史被彻底改…

2026/7/29 0:00:23 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/28 8:29:16 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/28 5:03:42 阅读更多 →

月新闻