资源推荐

学习方法:先看视频再刷题,书籍作为基础知识进行补充,交替进行


刷题进度

第100道题


链表专题心得

感觉最近练的太快了,开始用专题的形式刷 LeetCode。这一周虽然把基础算法搞懂了,但是我需要系统性的刷题巩固,这一周是链表

链表主要就是考虑边界条件的问题,比如如何区分 while nodewhile node.next,一些基础的操作比如反转链表,什么时候使用 dummy node,还有快慢指针。

1. node 和 node.next 的选择

对于增加删除节点:因为涉及到对于下一个节点的更改,使用 node.next 为佳,最终指针指向最后一个节点。

对于查找遍历:使用 node 更直观简洁,最终指针指向空节点。比如快慢指针,因为快指针走两步,为防止越界,需要 node and node.next,起到保护作用。

2. 反转链表

我认为一道困难的题目需要拆解成更模块化的内容才容易做,反转链表更像是一个积木,当题目需要的时候把积木搭上去就好了,语法只要稍加理解就完全可以背下来:

pre = None
cur = head
while cur:
    nxt = cur.next
    cur.next = pre
    pre = cur
    cur = nxt

3. Dummy Node 使用场景

使用的时候需要考察是否会涉及到对 head 节点的修改,如果使用了 dummy node 大部分情况下也需要使用 while node.next