单链表(Singly Linked List)是一种线性数据结构,由一系列节点(Node)组成。每个节点包含两个部分:数据(Data)和指向下一个节点的指针(Next)。在单链表中,每个节点只能指向下一个节点,因此只能沿着链表的方向进行遍历。
下面是一个简单的单链表实现的例子,使用 Python 编写。
单链表节点类
每个节点包含数据部分和指向下一个节点的指针。
class Node:
def __init__(self, data):
self.data = data # 节点的数据
self.next = None # 下一个节点的指针,默认为 None
单链表类
单链表类包含一些基本操作,例如插入、删除、遍历等。
class SinglyLinkedList:
def __init__(self):
self.head = None # 初始时链表为空
# 向链表末尾插入新节点
def append(self, data):
new_node = Node(data)
if not self.head: # 如果链表为空,将新节点作为头节点
self.head = new_node
return
last_node = self.head
while last_node.next: # 找到链表的最后一个节点
last_node = last_node.next
last_node.next = new_node # 将最后一个节点的 next 指向新节点
# 打印链表
def print_list(self):
current_node = self.head
while current_node:
print(current_node.data, end=" -> ")
current_node = current_node.next
print("None")
# 在链表头插入新节点
def prepend(self, data):
new_node = Node(data)
new_node.next = self.head # 新节点指向原来的头节点
self.head = new_node # 更新头节点为新节点
# 删除链表中的某个节点
def delete(self, key):
current_node = self.head
# 如果头节点就是要删除的节点
if current_node and current_node.data == key:
self.head = current_node.next
current_node = None
return
prev_node = None
while current_node and current_node.data != key:
prev_node = current_node
current_node = current_node.next
if current_node is None:
print(f"Node with data {key} not found")
return
prev_node.next = current_node.next # 跳过当前节点
current_node = None # 释放当前节点
# 查找链表中是否有某个值
def search(self, key):
current_node = self.head
while current_node:
if current_node.data == key:
return True
current_node = current_node.next
return False
使用示例
# 创建一个空链表
linked_list = SinglyLinkedList()
# 向链表中添加节点
linked_list.append(1)
linked_list.append(2)
linked_list.append(3)
# 打印链表
linked_list.print_list() # 1 -> 2 -> 3 -> None
# 在链表头部插入节点
linked_list.prepend(0)
linked_list.print_list() # 0 -> 1 -> 2 -> 3 -> None
# 删除链表中的一个节点
linked_list.delete(2)
linked_list.print_list() # 0 -> 1 -> 3 -> None
# 查找链表中的某个节点
print(linked_list.search(1)) # True
print(linked_list.search(4)) # False
解释:
- Node 类:表示链表中的一个节点,每个节点有
data
和next
两个属性,data
存储数据,next
是指向下一个节点的指针。 - SinglyLinkedList 类:这是单链表的主要类,包含了插入、删除、查找和打印链表的方法。
- append 方法:在链表末尾添加新节点。
- prepend 方法:在链表头部插入新节点。
- delete 方法:删除指定值的节点。
- search 方法:查找链表中是否存在某个值。
这个实现展示了一个基本的单链表操作,你可以根据需要进一步扩展,比如增加反向遍历、链表长度计算等功能。