单链表算法的基本思路
算法
1. 删除链表节点
如下例,删除节点2
找到cur
的情况下删除cur
prev.next = cur.next
如果是直接删除cur
的后一个节点
cur.next = cur.next.next
2. 替换两个节点
3. 一次遍历找到中点
双指针法(快慢指针)
快指针p2
的位移是慢指针p1
的2倍,所以当p2
走到链表尾部时,p1
刚好走了一半,指向链表的中点。
同理,找到倒数第N个节点也可以用快慢指针一次找到,先让快指针走N个节点,然后两个指针一起往后走,知道快指针到尾,这时慢指针指向的就是倒数第N个节点。
3. 反转链表
可以按正序访问原链表,然后新构建一个链表,刚好和原来的链表相反。并且不会占用多余的空间。
4. 链表判圈
Floyd判圈算法(龟兔赛跑算法)
如果链表存在环,则两个速度不同的指针必定会相遇。并且从相遇点和链表头结点同时往下走,会在环起点相遇。
其他
如果你需要经常添加或删除结点,链表可能是一个不错的选择。
如果你需要经常按索引访问元素,数组可能是比链表更好的选择。
上一篇
JS事件循环
下一篇
二叉搜索树基本知识及相关算法