算法-链表

链表

特点:节点之间可以相互连接。

每个节点的数据结构为:值,下一个节点。

 

经典题目

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. 回文链表

解法:双指针。使用快慢指针找到中间反转链表的节点。

 

posted @ 2021-08-28 15:14  xuyv  阅读(43)  评论(0)    收藏  举报