链表是数据结构中非常重要的结构,但是链表本身不难,难的是写代码的逻辑要清晰。
注意点
之所以首先开头就是注意点是因为,链表确实要尤为注意几点。
1. 考虑链表为空的时候
2. 每次写逻辑代码尽量在草纸上画出图案
3. 考虑是否有头结点
事实上,链表的逻辑也就是那么多,比如单链表删除一定要记得前一个节点,头插和尾插在一定程度上可以颠倒原来的数据。
只要逻辑清晰,链表只是小 case。
有无头结点
我个人是倾向于写头结点的,因为写头结点可以省很多事情,但即便是这样我还是要介绍这两种情况。
有头结点
代码
1 | class Node: |
说明
我很可以很容易的看出
当整个链为空的时候,是 head->next = None
无论是怎么操作,只要从 head 开始就好
没有头结点
1 | class Node: |
说明
对于没有头结点的,第一个节点就是链的开头
当链为空的时候,没有表示
当链只有一个元素的时候,指向自己,或者 None
链的类型
对于链表来说,总的类型可以分为两类,一个是循环链表,另一个是不循环链表,又可以从另外一个角度分为单链表和双链表。
其他的链表种类,都是万变不离其宗,在此就不详细说明了。
注意点
链有它自己很大的优势,但劣势也很大,所以,具体如何使用,还需要看具体的项目是什么
尤为注意的是,链表的删除需要前一个节点。所以一般有点思考的操作,只需要两个变量,一前一后遍历即可,前面的找到目标,就可以用后面的那个变量操作。
在编写代码的时候,要注意链表为空或者为一个的特殊时候