Python链表的基础概念和基础用法详解
链表是一种数据结构,它由节点组成,每个节点包含数据和指向下一个节点的引用。链表的优点是在插入/删除元素方面比数组更快,但随机访问元素的时间比较慢。
基本概念
链表的基本组成是节点,每个节点包括数据和指向下一个节点的引用。下面是一个简单的链表节点类:
class Node:
def __init__(self, data):
self.data = data
self.next = None
在上面的代码中,我们定义了一个节点类,它有一个包含数据的属性 data
和一个指向下一个节点的属性 next
,其中,默认值是 None
。
链表头是第一个节点。如果链表为空,则头为 None
。下面是一个简单的链表类:
class LinkedList:
def __init__(self):
self.head = None
在上面的代码中,我们定义了一个链表类,它有一个包含头节点的属性 head
,默认为 None
。
基础用法
在链表中添加节点
def add_node(self, data):
if self.head is None:
self.head = Node(data)
else:
current_node = self.head
while current_node.next is not None:
current_node = current_node.next
current_node.next = Node(data)
在上面的代码中, add_node
方法接受一个数据参数。如果链表为空,则可以将新节点作为头节点添加到链表中。否则,它会遍历链表并将新节点添加到最后一个节点的 next
属性中。
从链表中删除节点
def delete_node(self, data):
if self.head is None:
return
if self.head.data == data:
self.head = self.head.next
return
current_node = self.head
while current_node.next is not None:
if current_node.next.data == data:
current_node.next = current_node.next.next
return
current_node = current_node.next
在上面的代码中, delete_node
方法接受一个数据参数。如果链表为空,则不执行任何操作。如果要删除的节点是头节点,则将头节点更新为下一个节点。否则,它将遍历链表并删除包含指定数据的节点。
示例说明
示例1
# 创建一个链表
linked_list = LinkedList()
# 添加节点到链表
linked_list.add_node(1)
linked_list.add_node(2)
linked_list.add_node(3)
# 输出链表中的所有节点
current_node = linked_list.head
while current_node is not None:
print(current_node.data)
current_node = current_node.next
# 删除节点
linked_list.delete_node(2)
# 再次输出链表中的所有节点
current_node = linked_list.head
while current_node is not None:
print(current_node.data)
current_node = current_node.next
在上面的代码中,我们创建了一个包含三个节点的链表,然后输出了每个节点的值。然后,我们从链表中删除一个节点,并重新输出链表中的所有节点。
输出结果为:
1
2
3
1
3
示例2
# 创建一个链表
linked_list = LinkedList()
# 输出链表中的所有节点
current_node = linked_list.head
while current_node is not None:
print(current_node.data)
current_node = current_node.next
# 删除节点
linked_list.delete_node(2)
# 再次输出链表中的所有节点
current_node = linked_list.head
while current_node is not None:
print(current_node.data)
current_node = current_node.next
在上面的代码中,我们只是尝试输出空链表中的所有节点,并且删除一个不存在的节点。
输出结果为:
注意,第一个循环中没有输出任何内容,因为链表为空。而在第二个循环中,由于链表为空,因此没有输出任何内容。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python链表的基础概念和基础用法详解 - Python技术站