如何在Python中实现单向链表和双向链表?

简介: 如何在Python中实现单向链表和双向链表?

单向链表和双向链表都是常见的数据结构,用于存储和组织一组数据。以下是在 Python 中实现单向链表和双向链表的示例代码:

单向链表:

class Node:
    def __init__(self, data=None):
        self.data = data  # 初始化节点对象,保存数据
        self.next = None  # 初始化下一个节点指针为 None

class LinkedList:
    def __init__(self):
        self.head = None  # 初始化链表的头节点为 None

    def append(self, data):
        new_node = Node(data)  # 创建一个新节点

        if self.head is None:  # 如果链表为空,将新节点设置为头节点
            self.head = new_node
        else:
            current = self.head
            while current.next:
                current = current.next  # 找到链表的最后一个节点
            current.next = new_node  # 在最后一个节点的 next 指针处添加新节点

    def print_list(self):
        elements = []
        current = self.head

        while current:
            elements.append(current.data)  # 遍历链表,将节点数据添加到列表中
            current = current.next

        print(elements)  # 打印列表中的节点数据


# 创建一个单向链表对象
llist = LinkedList()

# 添加节点
llist.append(1)
llist.append(2)
llist.append(3)

# 打印链表内容
llist.print_list()

上述代码实现了一个简单的单向链表。其中,Node 类表示链表中的节点,包含数据和指向下一个节点的指针;LinkedList 类表示链表,包含头节点和添加节点的方法。

双向链表:

class Node:
    def __init__(self, data=None):
        self.data = data  # 初始化节点对象,保存数据
        self.prev = None  # 初始化前一个节点指针为 None
        self.next = None  # 初始化下一个节点指针为 None

class DoublyLinkedList:
    def __init__(self):
        self.head = None  # 初始化链表的头节点为 None

    def append(self, data):
        new_node = Node(data)  # 创建一个新节点

        if self.head is None:  # 如果链表为空,将新节点设置为头节点
            self.head = new_node
        else:
            current = self.head
            while current.next:
                current = current.next  # 找到链表的最后一个节点
            current.next = new_node
            new_node.prev = current  # 在最后一个节点的 next 指针处添加新节点,并设置新节点的 prev 指针

    def print_list(self):
        elements = []
        current = self.head

        while current:
            elements.append(current.data)  # 遍历链表,将节点数据添加到列表中
            current = current.next

        print(elements)  # 打印列表中的节点数据


# 创建一个双向链表对象
dllist = DoublyLinkedList()

# 添加节点
dllist.append(1)
dllist.append(2)
dllist.append(3)

# 打印链表内容
dllist.print_list()

上述代码实现了一个简单的双向链表。与单向链表类似,Node 类表示链表中的节点,包含数据和前后节点的指针;DoublyLinkedList 类表示链表,包含头节点和添加节点的方法。

希望这些示例代码能够帮助你理解如何在 Python 中实现单向链表和双向链表。如果你有任何进一步的问题,请随时提问。

相关文章
|
7月前
|
存储 Python
Python 中链表的个人理解
简介:本文介绍了Python中链表的基本组成及其操作实现。链表由`head`(头节点)、中间节点和`tail`(尾节点)三部分构成,每个节点通过`Node`类定义,包含`value`(值域)和`next`(指针域)。示例代码展示了链表的增删查功能,包括`add`(头部插入)、`append`(尾部插入)、`remove`(删除节点)、`search`(查找节点)及遍历方法。运行结果验证了链表操作的正确性。
|
9月前
|
存储 Python
Python 实现单向链表,和单向链表的反转
链表是一种数据结构,每个节点存储相邻节点的位置信息。单链表中的节点仅存储下一节点的位置。通过Python实现单链表,定义`ListNode`类并关联节点可创建链表。例如,创建A->B->C的链表后,可通过反转函数`reverse`将链表反转为CBA。代码展示了如何实现和操作单链表。
214 6
Python 实现单向链表,和单向链表的反转
|
索引 Python
【Leetcode刷题Python】328. 奇偶链表
在不使用额外空间的情况下,将链表中的奇数和偶数索引节点重新排序的方法,并提供了相应的Python实现代码。
139 0
|
Python
【Leetcode刷题Python】25.K 个一组翻转链表
解决LeetCode "K 个一组翻转链表" 问题的三种方法:使用栈、尾插法和虚拟节点顺序法,并提供了每种方法的Python实现代码。
202 0
|
存储 JavaScript 前端开发
JavaScript实现单向链表
JavaScript实现单向链表
284 109
|
9月前
|
存储 算法 搜索推荐
Python 实现反转、合并链表有啥用?
大家好,我是V哥。本文介绍Python实现反转链表和合并链表的应用场景及代码实现。反转链表适用于时间序列数据展示、回文链表判断等;合并链表则用于大规模数据排序、数据库查询结果集合并等。通过迭代和递归方法实现反转链表,以及合并两个或多个有序链表的算法,帮助开发者解决实际问题。关注V哥,了解更多实用编程技巧。 先赞再看后评论,腰缠万贯财进门。
187 0
|
10月前
|
Python
探索 Python 中链表的实现:从基础到高级
链表是一种由节点组成的基础数据结构,每个节点包含数据和指向下一个节点的引用。本文通过Python类实现单向链表,详细介绍了创建、插入、删除节点等操作,并提供示例代码帮助理解。链表在处理动态数据时具有高效性,适用于大量数据变动的场景。文章为初学者提供了全面的入门指南,助你掌握链表的核心概念与应用。
540 0
|
存储
【初阶数据结构】深入解析单链表:探索底层逻辑(无头单向非循环链表)(一)
【初阶数据结构】深入解析单链表:探索底层逻辑(无头单向非循环链表)
171 1
|
Python
【Leetcode刷题Python】114. 二叉树展开为链表
LeetCode上114号问题"二叉树展开为链表"的Python实现,通过先序遍历二叉树并调整节点的左右指针,将二叉树转换为先序遍历顺序的单链表。
136 3
【Leetcode刷题Python】114. 二叉树展开为链表
|
算法 Java
数据结构与算法学习六:单向环形链表应用实例的约瑟夫环问题
这篇文章通过单向环形链表的应用实例,详细讲解了约瑟夫环问题的解决方案,并提供了Java代码实现。
211 0

推荐镜像

更多