Python中如何实现链表数据结构
发布时间:2023-12-04 21:19:41
链表(Linked List)是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。相比于数组,链表的优势在于可以在O(1)的时间复杂度内进行插入和删除操作。
下面是使用Python实现链表的代码示例:
class Node:
def __init__(self, data=None):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def append(self, data):
new_node = Node(data)
if not self.head:
self.head = new_node
else:
current = self.head
while current.next:
current = current.next
current.next = new_node
def insert(self, data, position):
new_node = Node(data)
if position == 0:
new_node.next = self.head
self.head = new_node
else:
current = self.head
for _ in range(position - 1):
if current.next:
current = current.next
else:
raise IndexError("Position out of range")
new_node.next = current.next
current.next = new_node
def delete(self, data):
if not self.head:
raise ValueError("List is empty")
if self.head.data == data:
self.head = self.head.next
else:
current = self.head
while current.next:
if current.next.data == data:
current.next = current.next.next
return
current = current.next
raise ValueError("Data not found")
def search(self, data):
current = self.head
while current:
if current.data == data:
return True
current = current.next
return False
def __str__(self):
values = []
current = self.head
while current:
values.append(str(current.data))
current = current.next
return "->".join(values)
以上代码实现了一个单向链表,包括了向链表末尾追加节点、向指定位置插入节点、删除制定值的节点、搜索链表中是否包含某个值等功能。
下面是使用示例:
# 创建一个空链表 my_list = LinkedList() # 向链表末尾追加节点 my_list.append(1) my_list.append(2) my_list.append(3) print(my_list) # 输出:1->2->3 # 向指定位置插入节点 my_list.insert(4, 1) print(my_list) # 输出:1->4->2->3 # 删除节点 my_list.delete(2) print(my_list) # 输出:1->4->3 # 搜索节点 print(my_list.search(4)) # 输出:True print(my_list.search(5)) # 输出:False
通过以上示例,我们可以看到链表的基本使用方法,和其它数据结构相比,链表可以更加高效地进行插入和删除操作。但是链表的查找操作效率较低,需要遍历整个链表。
