用python写单链表

简介: 用python写单链表

链表的数据结构

链表是什么呢,来看下

链表,是一种数据结构。相对于数组而言,是不连续的一块内存空间。不仅如此,而且链表有多种,包括:单链表,双向链表,循环链表。这里先说下单链表。


单链表

单链表,由data数据域和next指针组成。简单点,就如下代码:

class Node:
    def __init__(self, data: int, nextNode: None):
        self._data = data
        self._nextNode = nextNode

操作

先说插入吧,插入分为几种情况,头插入,尾插入,中间任意位置插入。

头插入

代码如下:

尾插入

这个也比较简单,如下图:

中间插入

这个就比较复杂了,中间某个Node插入,分为2中情况, 这个位置的前边还是后边呢?接下来看代码,如下图,前边插入:

还有一种情况是后边插入,如下图:

插入就结束了。插入简单,但是查找费时。


来看下删除操作吧,删除的操作代码如下:

时间复杂度:O(n),这个主要浪费在查找上。

查找

代码如下:

时间复杂度O(n)

总结

总得来说,链表和数组相比,不是连续的内存空间,相对来说也复杂一点。插入操作和删除操作虽然比较效率高,但是时间耗费在查找上。查找的效率是O(n)。

相关文章
|
4月前
|
Python
【Leetcode刷题Python】21. 合并两个有序链表
介绍了几种不同的方法来合并多个已排序的链表,包括暴力求解、使用小顶堆以及分而治之策略。
42 2
|
4月前
|
索引 Python
【Leetcode刷题Python】328. 奇偶链表
在不使用额外空间的情况下,将链表中的奇数和偶数索引节点重新排序的方法,并提供了相应的Python实现代码。
35 0
|
4月前
|
Python
【Leetcode刷题Python】25.K 个一组翻转链表
解决LeetCode "K 个一组翻转链表" 问题的三种方法:使用栈、尾插法和虚拟节点顺序法,并提供了每种方法的Python实现代码。
35 0
|
4月前
|
Python
【Leetcode刷题Python】114. 二叉树展开为链表
LeetCode上114号问题"二叉树展开为链表"的Python实现,通过先序遍历二叉树并调整节点的左右指针,将二叉树转换为先序遍历顺序的单链表。
29 3
【Leetcode刷题Python】114. 二叉树展开为链表
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
54 5
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 18. 删除链表的节点
Leetcode题目"剑指 Offer 18. 删除链表的节点"的Python解决方案,通过使用双指针法找到并删除链表中值为特定数值的节点,然后返回更新后的链表头节点。
41 4
|
4月前
|
存储 Python
【Leetcode刷题Python】23. 合并K个升序链表
合并K个升序链表的方法:使用数组排序的暴力求解法、使用小顶堆的高效方法,以及分而治之的策略,并提供了相应的Python实现代码。
21 1
|
4月前
|
Python
【Leetcode刷题Python】138. 复制带随机指针的链表
LeetCode上题目“138. 复制带随机指针的链表”的Python解决方案,包括两种方法:一种是在每个节点后复制一个新节点然后再分离出来形成新链表;另一种是构建一个字典来跟踪原始节点与其副本之间的映射关系,从而处理新链表的构建。
22 1
|
4月前
|
算法 Python
【Leetcode刷题Python】106.相交链表
采用双指针法来找出两个链表的相交起始节点,并详细解释了算法的时间和空间复杂度。
26 1
|
4月前
|
Python
【Leetcode刷题Python】206.反转链表
LeetCode上第206题“反转链表”问题的Python解决方案,其中包括了使用迭代方法来实现链表的反转。
30 1