链表|707.设计链表

力扣题目链接

typedef struct MyLinkedList {int val;struct MyLinkedList* next;
}MyLinkedList;/** Initialize your data structure here. */MyLinkedList* myLinkedListCreate() {//这个题必须用虚拟头指针,参数都是一级指针,头节点确定后没法改指向了!!!MyLinkedList* head = (MyLinkedList *)malloc(sizeof (MyLinkedList));head->next = NULL;return head;
}/** Get the value of the index-th node in the linked list. If the index is invalid, return -1. */
int myLinkedListGet(MyLinkedList* obj, int index) {MyLinkedList *cur = obj->next;for (int i = 0; cur != NULL; i++){if (i == index){return cur->val;}else{cur = cur->next;}}return -1;
}/** Add a node of value val before the first element of the linked list. After the insertion, the new node will be the first node of the linked list. */
void myLinkedListAddAtHead(MyLinkedList* obj, int val) {MyLinkedList *nhead = (MyLinkedList *)malloc(sizeof (MyLinkedList));nhead->val = val;nhead->next = obj->next;obj->next = nhead;}/** Append a node of value val to the last element of the linked list. */
void myLinkedListAddAtTail(MyLinkedList* obj, int val) {MyLinkedList *cur = obj;while(cur->next != NULL){cur = cur->next;}MyLinkedList *ntail = (MyLinkedList *)malloc(sizeof (MyLinkedList));ntail->val = val;ntail->next = NULL;cur->next = ntail;
}/** Add a node of value val before the index-th node in the linked list. If index equals to the length of linked list, the node will be appended to the end of linked list. If index is greater than the length, the node will not be inserted. */
void myLinkedListAddAtIndex(MyLinkedList* obj, int index, int val) {if (index == 0){myLinkedListAddAtHead(obj, val);return;}MyLinkedList *cur = obj->next;for (int i = 1 ;cur != NULL; i++){if (i == index){MyLinkedList* newnode = (MyLinkedList *)malloc(sizeof (MyLinkedList));newnode->val = val;newnode->next = cur->next;cur->next = newnode;return;}else{cur = cur->next;}}
}/** Delete the index-th node in the linked list, if the index is valid. */
void myLinkedListDeleteAtIndex(MyLinkedList* obj, int index) {if (index == 0){MyLinkedList *tmp = obj->next;if (tmp != NULL){obj->next = tmp->next;free(tmp);     }return;}MyLinkedList *cur = obj->next;for (int i = 1 ;cur != NULL && cur->next != NULL; i++){if (i == index){MyLinkedList *tmp = cur->next;if (tmp != NULL) {cur->next = tmp->next;free(tmp);}return;}else{cur = cur->next;}}}void myLinkedListFree(MyLinkedList* obj) {while(obj != NULL){MyLinkedList *tmp = obj;obj = obj->next;free(tmp);}
}

看着很长,其实理解了就很容易打出来,但是理解也不容易哈哈哈~

就算理解了,会敲代码也是两回事,数学层面的理解和机器(代码)层面的理解转换也是很重要哒!

嗯嗯,我还没从数学层面的理解转换的机器层面上来,所以还是独立敲不出来,但是多练习几次一定可以做到的,因为我之前题目也是这么一个情况哈哈哈

一、出错点

1.关于创建虚拟头结点的理解

2.不知道该开辟哪些内存空间

3.对于链表操作不熟悉

二、理解后的思路

其实这题主要讲的就是数据结构中链表的应用,增删改查等

所以它主要考察的就是对知识点的掌握记忆与熟练运用

代码随想录 (programmercarl.com) 详细了解请看这个

不过我觉得这个讲解的也不是特别详细,它是针对于这个题目来讲解的,所以想真正掌握学懂这个知识点我推荐大家去看《大话数据结构》里面的链表知识点!!!

关于我自己也不是特别熟悉的理解它,所以我就先不说自己的理解了,怕误人子弟。

三、总结

要学会简化题目,找到对应的知识点,从简单的开始了解学习。

然后需要多多练习链表的基本操作,先看《大话数据结构》里面的知识点进行逐步了解!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/520277.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣大厂热门面试算法题 - 矩阵

解数独,单词搜索,被围绕的区域。每题做详细思路梳理,配套Python&Java双语代码, 2024.03.07 可通过leetcode所有测试用例。 目录 37. 解数独 解题思路 完整代码 Python Java 79. 单词搜索 解题思路 完整代码 Python…

.Net6使用JWT认证和授权

文章目录 目的实现案例一.项目所需包:二.配置项目 appsettings.json 文件:三.创建Model文件夹,添加AppConfig类和UserRole类1.AppConfig类获取appsettings.json文件中的值2.UserRole类用于区分用户信息和权限 四.主体代码案例:1.L…

软考66-上午题-【面向对象技术】-小结+杂题

一、杂题 真题1: 真题2: 真题4: 真题5: 真题6: 二、面向对象设计-总结 2-1、考题分析 选择题:11道(11分) 综合分析题:2道(30分) java程序设计…

MySQL 存储过程(超详细)

一、什么是存储过程? 存储过程可称为过程化SQL语言,是在普通SQL语句的基础上增加了编程语言的特点,把数据操作语句(DML)和查询语句(DQL)组织在过程化代码中,通过逻辑判断、循环等操作实现复杂计算的程序语言。换句话说&#xff0c…

足球俱乐部管理系统:Java与SpringBoot的管理系统实践

✍✍计算机毕业编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、…

字符串函数和内存函数

文章目录 字符串函数strlen函数模拟实现 strcpy函数模拟实现 strcat函数使用模拟实现 strcmp函数使用模拟实现 strncpy函数使用模拟实现 strstr函数使用模拟实现 strtok函数使用 strerror函数使用 内存函数memset函数使用memcmp函数memcpy函数使用模拟实现 memmove函数使用模拟…

计算机二级 第2套

一、选择题 二、编程题

工作纪实46-关于微服务的上线发布姿势

蓝绿部署 在部署时,不需要将旧版本的服务停掉,而是将新版本与旧版本同时运行,新版本测试无误之后再将旧版本停掉。这样可以避免再升级的过程中如果失败服务不可用的问题,因为同时部署了两个版本的程序,使得硬件资源是…

如何在Linux系统Docker部署Dashy并远程访问内网服务界面

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【排序算法】深入理解快速排序算法:从原理到实现

目录 1. 引言 2. 快速排序算法原理 3. 快速排序的时间复杂度分析 4. 快速排序的应用场景 5. 快速排序的优缺点分析 5.1 优点: 5.2 缺点: 6. Java、JavaScript 和 Python 实现快速排序算法 6.1 Java 实现: 6.2 JavaScript 实现&#…

稀疏数组实现

博文主要是自己学习的笔记,供自己以后复习使用, 参考的主要教程是B站的 尚硅谷数据结构和算法 稀疏数组(sparse array) 实际需求:五子棋程序中的存盘退出和续上盘的功能 问题分析: 如果直接用二维数组,很多值是默认…

SqlServer如何查询mdf的数据库版本

问题描述 今天附件数据库一直报错,百思不得其姐。最后发现可能数mdf数据库版本太低了,那么如何查询mdf文件的数据库版本呢? 解决方案: DBCC CHECKPRIMARYFILE(C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL…