基础知识
转载自:关于链表,你该了解这些!
-
链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。
-
数组是在内存中是连续分布的,链表在内存中不是连续分布的。而是散乱分布在内存中的某地址上,分配机制取决于操作系统的内存管理。
-
在面试的时候,往往要求先手写出来链表类的定义
// 单链表
struct ListNode {
int val; // 节点上存储的元素
ListNode *next; // 指向下一个节点的指针
ListNode(int x) : val(x), next(NULL) {} // 节点的构造函数
};
链表的操作
删除节点
只要将C节点的next指针 指向E节点就可以了。
在C++里最好是再手动释放这个D节点,释放这块内存。
增加节点
可以看出链表的增添和删除都是O(1)操作,也不会影响到其他节点。
要是删除第五个节点,需要从头节点查找到第四个节点通过next指针进行删除操作,查找的时间复杂度是O(n)。
性能分析
-
数组在定义的时候,长度就是固定的,如果想改动数组的长度,就需要重新定义一个新的数组。
-
链表的长度可以是不固定的,并且可以动态增删, 适合数据量不固定,频繁增删,较少查询的场景。