如何在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 中实现单向链表和双向链表。如果你有任何进一步的问题,请随时提问。

相关文章
|
1月前
【数据结构】单链表之--无头单向非循环链表
【数据结构】单链表之--无头单向非循环链表
|
2月前
|
存储 缓存 算法
链表全景:探索单链表、双向链表与循环链表【实战演练】
链表全景:探索单链表、双向链表与循环链表【实战演练】
33 3
|
23天前
|
存储 算法 C语言
线性表,双向链表,静态链表,循环链表(约瑟夫环)(上)
线性表,双向链表,静态链表,循环链表(约瑟夫环)
39 5
|
1月前
|
算法 安全 数据处理
LeetCode刷题---707. 设计链表(双向链表-带头尾双结点)
LeetCode刷题---707. 设计链表(双向链表-带头尾双结点)
|
1月前
|
Python
Python实现数据结构(如:链表、栈、队列等)。
Python实现数据结构(如:链表、栈、队列等)。
33 0
|
1月前
|
存储
【双向链表】数据结构双向链表的实现
【双向链表】数据结构双向链表的实现
|
2月前
|
存储
数据结构 模拟实现LinkedList单向不循环链表
数据结构 模拟实现LinkedList单向不循环链表
33 0
|
3月前
|
缓存 算法 Java
6.单向链表正确实现方式
6.单向链表正确实现方式
41 1
|
3月前
|
C++ Python 索引
Python Numpy入门基础(二)数组操作
Python Numpy入门基础(二)数组操作
29 0
Python Numpy入门基础(二)数组操作
|
算法 Java Python
【leetcode刷题】17.相交链表——Java&python版
⭐欢迎订阅《leetcode》专栏,每日一题,每天进步⭐ 朋友们,请一定要珍惜身边的那个 ta 啊!你们之所以相遇,正是因为你走了 ta 走过的路,而 ta 也刚好走了你走过的路。这是何等的缘分! 而当你们携手继续走下去时,你会慢慢变成 ta 的样子,ta 也会慢慢变成你的样子。 ——leetcode此题热评
95 0
【leetcode刷题】17.相交链表——Java&python版