单链表算法的基本思路

单链表算法的基本思路

1. 删除链表节点

如下例,删除节点2

截屏20210407 下午1.06.00.png

找到cur的情况下删除cur

prev.next = cur.next

如果是直接删除cur的后一个节点

cur.next = cur.next.next

2. 替换两个节点

截屏20210407 下午3.15.36.png

3. 一次遍历找到中点

双指针法(快慢指针)

截屏20210407 下午3.24.30.png

快指针p2的位移是慢指针p1的2倍,所以当p2走到链表尾部时,p1刚好走了一半,指向链表的中点。

同理,找到倒数第N个节点也可以用快慢指针一次找到,先让快指针走N个节点,然后两个指针一起往后走,知道快指针到尾,这时慢指针指向的就是倒数第N个节点。

3. 反转链表

可以按正序访问原链表,然后新构建一个链表,刚好和原来的链表相反。并且不会占用多余的空间。

4. 链表判圈

Floyd判圈算法(龟兔赛跑算法)
如果链表存在环,则两个速度不同的指针必定会相遇。并且从相遇点和链表头结点同时往下走,会在环起点相遇。

其他

如果你需要经常添加或删除结点,链表可能是一个不错的选择。
如果你需要经常按索引访问元素,数组可能是比链表更好的选择。

上一篇 JS事件循环
下一篇 二叉搜索树基本知识及相关算法