实现链表需要定义节点类,节点类包含每个节点的值和指向下一个节点的指针。链表类需要有一个指向链表头节点的指针。
定义节点类
节点类包含__init__
方法和__str__
方法。
__init__
方法用于初始化节点的值和指针。
__str__
方法用于打印节点。
class Node:
def __init__(self, value):
"""
初始化节点
"""
self.value = value
self.next = None
def __str__(self):
"""
打印节点
"""
return f'{self.value}'
定义链表类
链表类包含__init__
方法和__str__
方法。
__init__
方法初始化链表头节点。
__str__
方法遍历整个链表并打印每个节点的值。
class LinkedList:
def __init__(self):
"""
初始化链表,设置链表头节点为None
"""
self.head = None
def __str__(self):
"""
遍历链表并打印每个节点的值
"""
lst = []
current = self.head
while current:
lst.append(str(current))
current = current.next
return '->'.join(lst)
添加节点
可以向链表中添加节点。添加节点时需要判断链表是否为空。如果链表为空,需要将新节点设置为链表头节点;如果链表非空,需要找到链表尾节点并将其指向新节点。
class LinkedList:
# ...
def add(self, value):
"""
向链表中添加节点
"""
# 链表为空,设置链表头节点
if not self.head:
self.head = Node(value)
return
# 链表非空,找到链表尾节点并将其指向新节点
current = self.head
while current.next:
current = current.next
current.next = Node(value)
删除节点
可以从链表中删除节点。删除节点时需要判断链表是否为空。如果链表为空,无法删除节点;如果链表非空,需要找到要删除节点的前一个节点并将其指向要删除节点的下一个节点。
class LinkedList:
# ...
def remove(self, value):
"""
从链表中删除节点
"""
# 链表为空,无法删除节点
if not self.head:
return
# 要删除的是链表头节点
if self.head.value == value:
self.head = self.head.next
return
# 链表非空,找到要删除节点的前一个节点并将其指向要删除节点的下一个节点
current = self.head
while current.next and current.next.value != value:
current = current.next
if current.next:
current.next = current.next.next
示例1:向链表中添加节点
linked_list = LinkedList()
linked_list.add(1)
linked_list.add(2)
linked_list.add(3)
linked_list.add(4)
print(linked_list)
输出:
1->2->3->4
示例2:从链表中删除节点
linked_list = LinkedList()
linked_list.add(1)
linked_list.add(2)
linked_list.add(3)
linked_list.add(4)
linked_list.remove(3)
print(linked_list)
输出:
1->2->4
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python中的单向链表实现 - Python技术站