目录
1.链表:一种物理存储单元上非连续,非顺序的存储结构
插入操作 : O(1)
易错:链表节点进行操作,首先要进行判空
核心操作:p=new ndoe(); p=p->next; tail->next = p;
2.链表的指针的二级引用和一级引用的情况
只要涉及到头指针的修改必须传递头指针的地址,其他情况只要传递头指针就行。
头指针的修改,即头指针的指向修改。一级指针只能修改指针所指向的内容,无法更改指针的指向。
3.常用技巧(做题时可以按顺序思考以下)及对应力扣习题题:
哑节点(dummy)
避免头节点的特判。
for while 如何用
1.确定序号 / 已 知部分长度 一般用for循环。
2.只知道节点一般用while循环。
杀疯了的双指针:
1.判断链表中点: 判断节点fast = fast->next 然后是否为空节点,还是判空fast->next然后再fast=fast->next->next 靠题意判定位置
2.倒数第K个节点:19. 删除链表的倒数第 N 个结点
3.反转链表(全部和部分)(变态头插法的变种):206. 反转链表 92. 反转链表 II
4.Floyd判圈算法:判断是否为环,判断入环点,判断环的长度。
5.合并两个有序链表 ------拓展------->链表归并排序。21. 合并两个有序链表 合并K个升序链表 148. 排序链表 25. K 个一组翻转链表
6.分隔链表:86. 分隔链表
7.回文链表:234. 回文链表
8.两数相加(维护一个进位变量):2. 两数相加 445. 两数相加 II
10.判断两个链表是否相交:160.相交链表 力扣
11.复刻带随机指针的链表:138. 复制带随机指针的链表
12.尾插法构造链表:定义一个尾指针,存链表尾节点,降低时间复杂度。
注意:一定要时刻注意指针的位置,尤其是停下来和起始的位置,
注意指针的走的总步数。
其他的技巧:
节点删除操作:p->next=p->next->next
其他leetcode练习习题:
删除链表中(重复)元素:82. 删除排序链表中的重复元素 II 237. 删除链表中的节点
旋转链表: 61. 旋转链表
ps:部分题解在之前的文章中。