python单向链表的基本操作细节(小白入门)

本文是作者初次写博客,详细解释了Python中的单向链表,包括链表的基本概念、节点定义、链表创建、基本操作(如长度计算、查找、删除、添加节点)以及链表在LeetCode问题中的应用。文章以直观易懂的方式阐述了链表的优势,并介绍了链表环的概念。
摘要由CSDN通过智能技术生成

今天是人生第一次写博客,记录自己学习的每一步,有些写的不好望指正。
自己之前在学习链表的时候总是会被一些很基本的问题搞得头晕脑胀,我觉得,晦涩难懂这就是很多初学者对链表的第一印象,书上的概念实在是太难理解了,对我们这些学渣很不友好,在这里我会用自己的方式和大家讨论一下链表究竟是什么存在。

一、链表(linked list)的基本概念

链表实际上是线性表的链式存储结构,与数组不同的是,链式存储并不要求数据项都顺序存放,可以散落在内存的各个角落。且链表的长度不是固定的,链表数据的这一特点使其可以非常的方便地实现节点的插入和删除操作

什么意思呢,我们在使用python列表的时候,如果我们需要删除列表当中的一个元素,或者说我们需要在当中插入一个元素,我们需要把这个列表中这个元素后面的数据项统统往前或是往后移一项,也就是我们熟知的***insert(n),pop(n)***,这两项操作的时间复杂度都是O(n)的,我们会想到这会不会是一种很笨的方法,可在python采取这样的方式也是有着python自己的妥协的。链表的存在就让我们可以更快的实现删除和插入。
图片来自中国大学mooc
在这里我们可以看见,这里的数据项没有任何规律的排布,但是只要在各个数据项之间建立我们所说的链,就可以顺序的读取我们的数据项,如果我们需要删除一个数据项,只需要剪断这一项和前后的链接就好了,我们可以把每一个数据项想象成一个树桩,而链接数据的链我们把它想象成绳子,如果我们要删除一个数据项,只需要直接把代表这个数据项的树桩前后的绳子直接连接,越过这个树桩即可,对于前后数据项的位置不需要有任何变化,如此一来,时间是不是就可以大大减少了呢。

二、链表中最基本元素:节点(Node) 以及创建一个单向链表

好,我们前面所说的树桩,在这里我们就不能再叫他树桩了,因为我们给他起了一个好听的名字:节点;

每个节点都至少会有两个信息,一个是数据项本身,一个是指向下一个节点的引用信息,在这里可以把数据项想象成树桩本身,引用信息可以想象成树桩上的钉子,你问我干嘛用的?当然是用来绑绳子的。看图!!
图片来自中国大学mooc
这里的temp可以看成是上一个节点的钉子,然后呢一条绳子绑在了本节点上,然后这个节点又伸出来一条绳子伸向了下一个节点。(这里注意观察next,下一个节点是一个空节点,所以显示next为None,圈起来)
这些元素共同组成了一个重要的结构:链表

那么我们现在就来在python当中实现创建一个单向链表吧,来人呐,上代码:

def Node:
	def __init__(self,data):
		self.data = data
		self.next = None

好的,这里的data就是我们这个树桩,啊不对,是节点的本体,也就是数据项了,这里的next呢,就是我们伸向下一个节点的绳子,这里我们使下一个节点是None。

那如果想要获取节点中的数据或者说我需要更新节点中的数据应该怎么办呢,很简单:

	def getdata(self):
		return self.data
	def update(self,newdate):
		self
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值