Day3-链表理论基础、203.移除链表元素 、707.设计链表、206.反转链表

链表理论基础

数据结构视频里面看过讲解,代码看过逻辑,但是没有具体实现过。

链表包括:单链表(单方向)、双链表(向前查询和向后查询)和 循环链表(首尾相接)。

链表在内存中不是连续的。

C++定义链表的方式:


链表删除节点时记得释放。链表增添和删除都是O(1)操作,但是查找的时间复杂度是O(n)。



203.移除链表元素

思考过程:很简单的查找,删除过程,但是链表的删除有注意点,先传地址再free

从来没写过链表题,直接看代码随想录:

我少思考了:如果对应元素在链表头怎么办,在链表尾怎么办

链表头:

1)直接用原来的链表进行删除操作(头结点向后挪一位就可以,free掉原来的头结点)(这道题是单链表

好处:简单;

坏处:需要单独针对头结点写代码。

 2)设置虚拟头结点进行删除操作

好处:所有链表元素的删除都可以按照同一段代码完成

链表尾:最后指向null

707.设计链表

思考过程:

这道题其实是上一道的进阶版,不仅需要写删除,还需要写查找和增加。不过好处是,写了查找之后,就可以在每个函数中直接调用,不需要增加和删除都写查找了。

看代码随想录:

对于插入链表元素来说,使用虚拟头结点的代码简便且插入简便。

206.反转链表

思考过程:

链表必须要从开头开始传递。首先设置虚拟头结点,将原先头结点next传递到cur->next中,一步一步将指向变换就可以。

代码随想录:

和我的思路是一样的,但是我不会具体实现。

双指针的方法这里也可以用!算是快慢指针8

总结:

虽然学完了数据结构,但是链表的代码从来没有自己写过,只是在脑子里面大概知道是什么样的步骤该怎么做。

这三道题都是比较基础的链表功能基本实现的问题,这次都是直接看的卡哥答案照着敲的,要多敲几次熟练一下。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容