博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对链表的简单复习和理解
阅读量:5337 次
发布时间:2019-06-15

本文共 1288 字,大约阅读时间需要 4 分钟。

最近在找实习,考的是leetcode的题目,被完虐了,决定狠下心来好好学习,今天要弄懂链表。

首先在面试过程中让手写代码,需要注意的地方,class 后面的__init__函数,不要犯基本的错误,挺丢人的。

好了步入正题,主要参考这篇文章https://mp.weixin.qq.com/s?__biz=MzUyNjQxNjYyMg==&mid=2247484127&idx=1&sn=d681b847e69e3a7fd729e3b480731aa1&chksm=fa0e6d5ecd79e4487f4427433682a9d7dc2d115224c2e3b5b10ca1dd37781f1201013cbd6584&mpshare=1&scene=1&srcid=0906rYLNJqGuqnjz2rP6TfMj&sharer_sharetime=1567750044735&sharer_shareid=681b9acc86a464fe16d7d37df2b991c3&pass_ticket=FwvEAn%2Fe9aWDV2a9bX9IChtPP5aBdf%2F3IX8imiYGHwtYybakfKNUl4HjuIJolhed#rd

链表,他具有动态的能力,不需要处理固定容量的问题,插入删除都会比数组来的简单一点,而麻烦之处就在于,他缺失了高效的随机访问的能力,无法通过索引直接获取对应的元素,在数组中能直接寻找索引的原因是数组开辟的空间在内存中是连续分布的,直接计算出数据所存储的内存地址,用O(1)复杂度可以拿出。

链表需要用next查找,每个节点的存储地址不同。

1、链表的插入

需要注意顺序,先在insert_node后面加上原来的后部节点,再把这一段加在原来的前部节点的后面

2、虚拟的头结点,dummyHead

用关键字new生成 dummyHead=new Node(null,null)

虚拟结点的位置索引可以置为-1

3、链表的删除元素的操作

4、链表的查找元素的操作

5、链表的修改元素的操作

6、一般会用到的:dummyHead 做遍历挂载,一个真正的头结点,一对经常搭配使用,cur遍历,pre前驱

7、还有常见的题目:删除倒数第k个节点,k个或两个有序链表的结合,翻转整个链表

8、一直的困惑解决:创建一个链表时创建的名字不要动,比如创建的是node,之后使得cc=node,这时候cc相当于是node的一个指针,更改他会更改后续的内容,不要直接在创建名上改√

 9、遇到链表问题先考虑当前链表为空以及链表的下一个结点是空的情况

10、考虑用递归的方式解决问题,效率更高

 11、有一道题目是翻转链表2,写的时候有几点没有注意的地方,

(1)是当m=n的时候,应该直接返回原来的链表,没考虑特殊情况

(2)当m=1的时候会比较特殊,因为他从刚开始就要翻转,解决这个问题的比较好的方法就是在链表前面加一个0的节点,这样就可以和其他的一样看待了

 

转载于:https://www.cnblogs.com/lin-kid/p/11474563.html

你可能感兴趣的文章
将html代码中的大写标签转换成小写标签
查看>>
jmeter多线程组间的参数传递
查看>>
零散笔记
查看>>
Activity
查看>>
事件驱动模型
查看>>
LiteDB源码解析系列(1)LiteDB介绍
查看>>
你真的懂示波器吗?工作面试中会用到的示波器知识(转)
查看>>
(16)JavaScript的流程控制(js的循环)
查看>>
java之equals()和hashCode()方法
查看>>
十进制转换为二进制(一直不会算的)
查看>>
Linux源码编译安装php7.3
查看>>
CF997B Roman Digits
查看>>
CF786B Legacy
查看>>
HighCharts的.Net本地导出环境配置
查看>>
获取url参数
查看>>
python3-开发面试题(python)6.23基础篇(2)
查看>>
ORACLE 异常错误处理
查看>>
0x03 前缀和与差分
查看>>
在C#中调用格式工厂进行任意视频格式到FLV的转换
查看>>
Centos6.9下安装OpenOffice 4.1.4
查看>>