单链表:链表中的每个元素实际上时一个单独的对象,而所有对象都通过每个元素中的引用字段/指针连 接在一起
双链表:与单链表不同的时,双链表的每个节点都含有两个引用字段/指针,一前一后
链表的优缺点
链表的优点如下:
链表能灵活地分配内存空间能在O(1)时间内删除或添加元素,前提是该元素的前一个元素已知,当然也取决于是单链表还是双链表,在双链表中,如果已知该元素的后一个元素,同样可以在O(1)的时间内删除或添加该元素
链表的缺点如下:
不像数组额能够通过下标迅速读取元素,每次都要从链表头开始一个个读取;查询第k个元素需要O(k)的时间
应用场景:
如果遇到的问题中,数据的元素个数不确定,而且需要频繁地进行添加和删除,那么链表会比较合适;但如果要解决的问题里里面需要多次访问,或数据元素大小确定,不怎么涉及插入与删除操作,链表可能不适合
常用技巧:
构建一个数据域空的链表头, 可以将首元素结点的操作一般化(第一个结点与其他结点一样):
建立链表时,首元结点与其他结点的操作一样更换首元素结点时不需要移动头指针
典型题目例如:
合并两个有序链表。将一个链表中的奇数与偶数按原定顺序分开后重新组合成又给新的链表,前一半时奇数,后一半为尾数。…
利用快慢指针:
典型题目例如:
链表的反转,寻找倒数第k个元素,寻找中间位置的元素,判断链表是否有环 …
建议:
在解决链表题目时,画出结点间的相互关系,然后画出修改的方法