链表的理论基础
在这篇文章中代码随想录算法| 链表先导知识 |链表理论基础-CSDN博客,介绍了如下几点:
- 链表的种类主要为:单链表,双链表,循环链表
- 链表的存储方式:链表的节点在内存中是分散存储的,通过指针连在一起。
- 链表是如何进行增删改查的。
- 数组和链表在不同场景下的性能分析。
链表经典题目
虚拟头结点
链表的一大问题就是操作当前节点必须要找前一个节点才能操作。这就造成了头结点的尴尬,因为头结点没有前一个节点了。
每次对应头结点的情况都要单独处理,所以使用虚拟头结点的技巧,就可以解决这个问题。
链表的基本操作
- 获取链表第index个节点的数值
- 在链表的最前面插入一个节点
- 在链表的最后面插入一个节点
- 在链表第index个节点前面插入一个节点
- 删除链表的第index个节点的数值
反转链表
反转链表是面试中高频题目,很考察面试者对链表操作的熟练程度。
有两种反转的方式:迭代法和递归法。
建议大家先学迭代法,然后再看递归法,因为递归法比较绕,如果迭代还写不明白,递归基本也写不明白了。
可以先通过迭代法,彻底弄清楚链表反转的过程!
删除倒数第N个节点
结合虚拟头结点 和 双指针法来移除链表倒数第N个节点。
链表相交
使用双指针来找到两个链表的交点(引用完全相同,即:内存地址完全相同的交点)
环形链表
这道题目可以说是链表的比较难的题目了。 但代码却十分简洁,主要在于一些数学证明