Python程序:从双向链表末尾删除一个新节点
在Python中,双向链表是一种数据结构,这种结构可以存储任意数量的节点,每个节点都有一个指向前一个节点和后一个节点的指针。想要在双向链表中删除节点,可以使用特定的方法。
更多Python相关文章,请阅读:Python 教程
创建双向链表
首先,需要创建双向链表来进行操作。下面是一个例子:
class Node:
def __init__(self, data):
self.data = data
self.prev = None
self.next = None
class DoublyLinkedList:
def __init__(self):
self.head = None
self.tail = None
def add_node(self, data):
new_node = Node(data)
if self.head is None:
self.head = new_node
self.tail = new_node
else:
new_node.prev = self.tail
self.tail.next = new_node
self.tail = new_node
这里,我们定义了两个类,第一个是节点Node
,第二个是双向链表DoublyLinkedList
。在Node
类中,我们定义了三个属性:data
表示节点存储的数据,prev
表示前一个节点的指针,next
表示后一个节点的指针。在DoublyLinkedList
类中,我们初始化了头结点和尾节点,并定义了一个添加新节点的方法。
通过运行下面的示例代码,可以看到如何向双向链表中添加节点:
d_list = DoublyLinkedList()
d_list.add_node(1)
d_list.add_node(2)
d_list.add_node(3)
d_list.add_node(4)
d_list.add_node(5)
current = d_list.head
while current:
print(current.data)
current = current.next
这段代码先创建了一个空的双向链表,然后添加了五个节点。最后,通过循环遍历整个链表,打印出每个节点的数据。
输出结果如下:
1
2
3
4
5
从双向链表末尾删除新节点
现在我们已经学会了如何创建一个双向链表,下面我们来删除链表的尾节点。
下面是删除链表尾节点的代码:
class Node:
def __init__(self, data):
self.data = data
self.prev = None
self.next = None
class DoublyLinkedList:
def __init__(self):
self.head = None
self.tail = None
def add_node(self, data):
new_node = Node(data)
if self.head is None:
self.head = new_node
self.tail = new_node
else:
new_node.prev = self.tail
self.tail.next = new_node
self.tail = new_node
def delete_node(self):
if self.head is None:
print("The list is empty.")
return
if self.head == self.tail:
self.head = None
self.tail = None
else:
self.tail = self.tail.prev
self.tail.next = None
def display(self):
current = self.head
while current:
print(current.data)
current = current.next
在DoublyLinkedList
类中,我们添加了一个用于删除节点的方法delete_node
。在这个方法中,我们先判断双向链表是否为空,如果是空链表,我们打印出错误信息并立即返回。之后,我们判断是否只有一个节点,如果只有一个节点,我们将头和尾都置为None。最后,我们将尾节点指向前一个节点,并将新尾节点的next
指针置为None。
下面是如何使用delete_node
方法,删除最后一个节点的示例代码:
d_list = DoublyLinkedList()
d_list.add_node(1)
d_list.add_node(2)
d_list.add_node(3)
d_list.add_node(4)
d_list.add_node(5)
d_list.delete_node()
d_list.display()
这段代码先创建了一个双向链表,然后添加了五个节点。在这段代码中,我们调用了delete_node
方法,删除了链表的尾节点。最后,我们调用display
方法,打印出整个链表。
输出结果如下:
1
2
3
4
可以看到,输出结果中最后一个节点被成功删除了。
结论
通过上述示例代码可以看到,在Python中,可以创建双向链表,并通过特定的方法来删除链表尾节点。双向链表还有其他常用的方法,可以根据实际需求进行操作。