链表:单链表、双链表和循环链表

链表:单链表、双链表和循环链表

一、什么是链表

通过「指针」串联起来的内存空间。如图下链表概念图,有 3 个字符串存储在一个链表中,每个数据都有一个指针指向下一个数据的内存地址。

链表概念图

二、优缺点
  • 优点:插入和删除高效,时间复杂度为 O(1)。
  • 缺点:查询低效,时间复杂度为 O(n)。

插入数据和删除数据操作都是改变一下指针方向便可。

插入数据

删除数据

查找数据低效是因为要从第 1 个数据开始顺着指针寻找。比如说要查询「Red」,那么就得从「Blue」开始,通过指针指向的内存地址找到「Yellow」,然后才能找到「Red」。

查找数据

三、3 种常用链表结构
  • 单链表:头结点是记录链表的基地址,尾结点是指向 NULL。

单链表

  • 双链表:两个空间存储前后结点地址,能双向遍历。但因为指针的增加导致存储空间增加,增删操作需要改变更多指针的指向。

双向链表

  • 循环链表:尾结点指向头结点,适合处理环形结构的数据。

四、例子

LeetCode 上的一个例子:删除链表中的节点。假设我们要删除「Yellow」这个结点,时间和空间复杂度都是:O(1)。

class Solution {
    public void deleteNode(ListNode node) {
        node.val = node.next.val;
        node.next = node.next.next;
    }
}

删除数据

1、首先我们把「Yellow」的值(node.next.val)赋值给「Green」(node.val)。

2、这时「Green」因为得到了「Yellow」的值,所以能修改方向指向结点「Red」。

3、最后链表变成了:「Blue」->「Green」->「Red」。

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » 链表:单链表、双链表和循环链表