实现一个简单的单向链表涉及两个基本的构建块:节点(Node)和链表(LinkedList)。下面是详细步骤和解释:
1. 实现节点(Node)
链表中的每个节点通常包含两部分:存储的数据(data)和一个指向下一个节点的引用(next)。节点可以用一个类来实现。
节点类的定义:
class ListNode:def __init__(self, data):self.data = data # 存储数据self.next = None # 初始时,下一个节点的引用为空
2. 实现链表(LinkedList)
链表则是节点的集合,通常包含对首个节点的引用,称为头节点(head)。通过头节点,你可以访问链表中的每个节点。
链表类的定义:
class LinkedList:def __init__(self):self.head = None # 初始时链表为空# 添加元素到链表末尾def append(self, data):new_node = ListNode(data) # 创建新节点if not self.head: # 如果链表为空,新节点成为第一个节点self.head = new_nodeelse: # 否则,遍历到链表末尾,并将最后一个节点的next指向新节点current = self.headwhile current.next:current = current.nextcurrent.next = new_node# 遍历链表,打印每个节点的数据def display(self):current = self.headwhile current:print(current.data, end=" -> ")current = current.nextprint("None")
使用链表
创建一个链表并添加数据,然后遍历显示:
# 创建链表实例
my_list = LinkedList()# 向链表添加数据
my_list.append(1)
my_list.append(2)
my_list.append(3)# 打印链表
my_list.display() # 输出 1 -> 2 -> 3 -> None
功能解释:
- 初始化 (
__init__
): 当创建链表实例时,设置头节点为None,表示开始时链表为空。 - 添加元素 (
append
): 创建一个新的节点,并将其添加到链表的末尾。这涉及到遍历链表直到找到最后一个节点,然后将其next
引用指向新节点。 - 显示链表 (
display
): 从头节点开始遍历链表,打印出每个节点中的数据,直到链表结束。
一个简单单向链表的实现,涵盖了最基本的操作:添加数据和遍历打印链表。当然,更完整的链表实现可能还包括删除节点、查找数据等操作。