单向链表和双向链表都是常见的数据结构,用于存储和组织一组数据。以下是在 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 中实现单向链表和双向链表。如果你有任何进一步的问题,请随时提问。