707.设计双向链表
文章目录 707.设计双向链表 链表简介 题目描述 代码实现 707.设计双向链表 链表简介 链表(LinkedList) 是一种线性表,但不是顺序表,因为它是通过节点直接的相互引用相互联系起来的。 由于不必按顺序存储, 链表在插入和删除的时候可以达到O(1)的复杂度 ,比顺序表快的多。但是查找一个节点或者访问特定编号的节点则需要O(n)的时间。 使用链表结构可以克服数组链表需要预先知道数据大小的缺点,充分利用计算机的内存空间,实现灵活的动态管理,但是链表失去了数组随机读取的优点,且链表由于 增加了节点指针域,空间开销较大 。 单链表结构如下图,但是参考 LinkedList 的实现思路,本文将会对双向链表进行总结: 下面是leetcode上面关于链表的题目及解题思路。 题目描述 设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。 在链表类中实现这些功能: get(index) :获取链表中第 index 个节点的值。如果索引无效,则返回-1。 addAtHead(val) :在链表的第一个元素之前添加一个值为 val 的节点。插入后