算法-链表
链表
特点:节点之间可以相互连接。
每个节点的数据结构为:值,下一个节点。
经典题目
1. 合并两个有序链表
解法:迭代(也可以递归),构建一个哨兵节点prehead,维护l1和l2的指针,和结果链表的prev指针。
比较l1和l2的值,取出最小的节点(l1或者l2的指针后移),放入prehead后面;prev指针指向此节点。
迭代上述过程,最后必有一个节点先变空。prev指针指向另一个非空链表l1或者l2。
结束
2. 环形链表,要求空间复杂度O(1)
解法:快慢指针
如果存在环形链表,则快慢指针必会相遇。
3. 相交链表,空间复杂度O(1)
解法:双指针
使用双指针A B,遍历链表LA LB,遇到链表尾部反过来遍历链表LB LA。
由于两个链表相交,则必定存在一个点,A B走过相同的步数到达。
返回那个节点。
4. 回文链表
解法:双指针。使用快慢指针找到中间反转链表的节点。