大家也可以使用 vscode blink-mind 打开源文件查看,里面有一些笔记可以点开查看。源文件可以去我的公众号《力扣加加》回复脑图获取,以后脑图也会持续更新更多内容。vscode 插件地址:https://marketplace.visualstudio.com/items?itemName=awehook.vscode-blink-mind
后面所有的图都是基于逻辑结构,而不是物理结构
有没有想过为啥只有二叉树,而没有一叉树。实际上链表就是特殊的树,即一叉树。
O(1)
。这里给定指针中的指针指的是插入位置的前驱节点。O(N)
。提示 1: 考虑头尾指针的情况。
提示 2: 新手推荐先画图,再写代码。等熟练之后,自然就不需要画图了。
提示 1: 考虑头尾指针的情况。
提示 2: 新手推荐先画图,再写代码。等熟练之后,自然就不需要画图了。
实际上,使用场景是可以死记硬背的。
合并两个有序数组也是一个简单题目,二者难度几乎一样。
链表是一种递归的数据结构,因此采用递归的思想去考虑往往事半功倍,关于递归思考链表将在后面《三个注意》部分展开。
绝大多数的题目都是单链表,而单链表只有一个后继指针。因此只有前序和后序,没有中序遍历。
这里给大家插播一个写递归的技巧,那就是想象我们已经处理好了一部分数据,并把他们用手挡起来,但是还有一部分等待处理,接下来思考”如何根据已经处理的数据和当前的数据来推导还没有处理的数据“就行了。
9527
。head = head.next
(ans 和 head 被切断联系了),此时的内存图:我们假设头节点的 next 指针指向的节点的内存地址为 10200
head.next = ListNode(4)
也是同理。因此最终的指向 ans.next 是 ListNode(4)。head = ListNode(2)
之后, head 和 ans 的关系就被切断了,当前以及之后所有的 head 操作都不会影响到 ans,因此 ans 还指向被切断前的节点,因此 ans.next 输出的是 ListNode(3)。反转链表的中间一部分
,那我们该怎么做?