目录
1. 初始化
不要因为熟悉而忘记思考为什么!!!!
L 是一个指向 LNode 型的指针, 更进一步来理解就是声明一个指向单链表第一个结点的指针。
2. 增删 (改)查操作
2.1 按位序插入
改用 for 循环找到第(i-1)个结点 !!!!
细节分析:
自己在写代码时, 一直在思考这个 j 的作用,开始认为 j 仅作为计数作用,用于遍历多少次来定位到 i-1 个结点。显然,如果能够将 j 的值与结点的位序对应起来,逻辑会很清晰易懂。
此外还在思考, j 的循环跳出条件尤其是 j<i-1 这个条件, 习惯了写 j<i, 导致总认为 j< i-1 别扭,这就是背代码的恶劣后果。但是后面还是细心分析出来了,是指针先往后移再改变的 j 值,所以尽管 j 不符时, 指针已经移动了,所以是 j<i-1.
所以核心就是,用逻辑驱动而非记忆!
注: for 循环和 while 循环要非常熟练,绝大部分两者可以互相转化。
改正: 方法名应该为 LinkInsert。
2.2 指定结点的后插和前插
2.3 按位序删除
// 不带头结点的特殊性在于 L 是指针,和结点是不同类型
// 双链表最后一个结点也存在特殊性
// i 值合法性判断, 申请内存判断,这些都应该是触发器
2.4 删除指定结点
2.5 按位查找
注:带头结点的单链表 ,查找和插入有个很大的不同,查找可以是第0个结点,而插入最多插入到第一个位置成为第一个结点。
暴露出了一个问题,只注重了方法内部的逻辑,没有梳理方法外部的“接口”作用
2.6 按值查找