(该篇基本等价于up主视频的学习笔记记录)
基本概念
- 在不连续内存空间中,存储当前元素与next指针指向下一个元素,即存储下一个元素的内存地址。
- 存在单向链表和双向链表(存在previous指针指向上一个元素)
- 基本操作及其时间复杂度
- 访问(通过索引获取):O(n)
- 搜索(通过元素获取):O(n)
- 插入:O(1)
- 删除:O(1)
(访问是指根据索引查询,搜索是指根据指根据值查询)- 优点
- 易插入删除
- 缺点:
- 不易查询
- 应用场景:
- 适用于读少些多、变化频繁的线性表
- 优点
基本操作python实现
#创建
class ListNode():
def __init__(self,val):
self.val=val
self.next=None
#self.pre=None #双向链表
#添加元素5,给定链表头节点head(目前默认为尾部添加)
cur=head
while cur.next:
cur=cur.next
cur.next=ListNode(5)
cur=cur.next
#访问第2个元素,给定链表头节点head
cur=head
idx=0
while idx<1:
cur=cur.next
idx+=1
#修改第2个元素为6
cur=head
idx=0
while idx<1:
cur=cur.next
idx+=1
cur.val=6
#查找元素3
cur=head
while cur:
if cur.val==3:
res=True
cur=cur.next
res=False
#删除元素3:请见下方题目
#链表的长度
cur=head
len_=0
while cur:
cur=cur.next
len_+=1
题目
熟悉数据结构
熟悉数据结构+算法
这里例举一般遇到链表题都有哪些解法,建议先看算法解题套路相关文章
其他
python没有链表类型变量?
很多的教材都是用C语言实现链表,因为c有指针,可以很方便的控制内存,很方便就实现链表,其他的语言,则没那么方便,由于python是动态语言,可以直接把对象赋值给新的变量,于是在python一切皆为对象的原理上实现链表的各项操作。