链表——理论基础篇

二. 链表——理论基础篇

2.1链表理论基础

定义:链表是一种通过指针串联在一起的线性结构,每一节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向空(NULL)。
链表的头节点:head
如图所示:
链表头节点

2.1.1链表类型

单链表:指针域只能指向节点的下一个节点,如上图所示
双链表:每一个节点有两个指针域,一个指向下一个节点,一个指向上一个节点
双链表
循环链表:链表首尾相连,可以解决约瑟夫环问题
循环链表

2.1.2 链表的存储方式

链表通过指针域的指针连接在内存中各个节点,在内存中不是连续分布的,而是散乱分布在内存中某地址上,分配机制取决于操作系统的内存管理。
链表在内存中的存储

2.1.3 链表的定义

//链表定义
struct ListNode {
	int val;//链表节点上存储的元素
	ListNode* next;//指向下一节点的指针
	ListNode(int x):val(x),next(NULL){}//节点的构造函数(c++会默认生成的构造函数不会初始化任何成员变量)
};

使用C++默认的构造函数与上述自定义的构造函数两者的区别在于:
①默认初始化节点,不能给变量赋值

//默认构造函数
ListNode* head = new ListNode();
head->val = 5;

②可以给变量赋值

//自定义构造函数
ListNode* head=new ListNode(5);

2.1.4 链表的操作

删除节点

删除节点
将节点C的指针连接到E节点就行,但是D节点仍然存在于内存,只不过不在链表中,C++需要手动释放。如果是Python、java由内存自动回收

添加节点

添加节点
将F添加到CD中,需要先将F与D连接起来再将C与F连接起来。注意如果顺序改变先连接CF再连接FD,则会导致D之后的节点与前面节点断开连接。
链表的增删节点都是O(1)操作,不会影响到其他节点。但是删除第5个节点,需要走到第4个节点,通过next指针操作,查找的时间复杂度是O(n)。

2.1.4 性能分析

数组链表性能对比

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值