JavaScript刷LeetCode拿offer-高频链表题

2022-11-10 13:09:26 浏览数 (1)

首先需要了解链表的概念

先把 next 记录下来

无论是插入,删除,还是翻转等等操作,先把 next 指针用临时变量保存起来,这可以解决 90% 重组链表中指向出错的问题,

如果不知道什么时候需要用到守卫,那就都用

类型守卫 emptyNode 是创建的一个空的节点,并将它连接到 head 节点之前,无论链表进行任何操作, emptyNode 都指向最后的头节点,是一个很实用的小方法,如果不知道什么时候用,什么时候不用,那就先都用起来吧;

其实在大部分时候,emptyNode 都是能用上,即便只是遍历查找值,用上作为第 0 个值,当要找第 k 个值的时候,也不需要再判空处理啊

头节点判空处理

如果懒或者经常忘记看题目的给定条件,头节点判空都做起来,对于一些翻转题,还得将 head.next 也判断起来;

到熟练之后,其实可以不做,但是用上最多就浪费一段代码,也还好

画图,画图,画图

遇事不决的时候,还是要画图,一步一步的连起来,总能够捋清楚的,画图是链表的关键所在

链表的节点是保存在内存中的一个数据结构

链表是一个特定的数据结构,在 JS 中可以表现为一个拥有 val 和 next 属性的对象,所以遇到形如交换两个链表节点的时候,千万不能交换两个链表的 val 值,虽然 LC 有一些题是可以过,但是实际上是不合理的,而且一旦出现这种思想,对于一些经典题 160. 相交链表 就会理解不了;

记住,链表是一个数据结构,不是一个值,可以类比成一个对象,交换链表比如不是简单交换值;

都是中等题

这里选的都是按照 LC 火热排序,中等难度的题,感觉纯链表学习做特别难没太大必要,毕竟我只是一个菜鸟,大佬们可以自由选择,一起

0 人点赞