Python程序:从双向链表末尾删除一个新节点

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中,可以创建双向链表,并通过特定的方法来删除链表尾节点。双向链表还有其他常用的方法,可以根据实际需求进行操作。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程