- 指针使用前,一定要检查指针是否是
nullptr
。 - 善用dummyNode
- 链表操作三板斧:slice, transform, splice 裁剪,变换,拼接
- 裁剪下来的节点,一定要设置
next
为nullptr
。
链表逆序:
LC206 Reverse Linked List
⚠️LC92 Reverse Linked List II[用dummyHead更容易处理m == 0的情况]
链表删除:
LC237 Delete Node in a Linked List[靠拷贝后一个节点的val来做删除]
LC19 Remove Nth Node From End of List[无论如何也要遍历,裁拼]
LC203 Remove Linked List Elements[删除给定值的节点,裁拼]
LC83 删除排序链表中的重复元素[裁变拼]
⚠️LC82 删除排序链表中的重复元素II[要求将重复元素全部清除,需要维护两个指针]
链表求环:
LC141 Linked List Cycle
LC142 Linked List Cycle II[环长为相遇时慢指针移动的步数]
LC287 Find the Duplicate Number[相等的是first/slow,返回的也是first/slow]
链表归并/排序:
LC21 Merge Two Sorted Lists
LC23 Merge k Sorted Lists
LC147 对链表进行插入排序
⚠️⚠️LC148 排序链表
其他:
❌LC24 两两交换链表中的节点
❌LC143 重排链表
LC138 复杂链表复制
LC725 分隔链表
LC160 两个链表的公共节点
❌LC24 K个一组翻转链表
LC1171 从链表中删去总和为零的连续节点
LC430 扁平化多级双向链表