链表:单链表、双链表和循环链表
一、什么是链表 通过「指针」串联起来的内存空间。如图下链表概念图,有 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)