在双向链表的末尾插入新节点的Python程序

在双向链表的末尾插入新节点的Python程序

双向链表是一种常见的数据结构,它在处理链表数据时比单向链表更灵活。在双向链表中,每个节点都有两个指针,一个指向前一个节点,一个指向后一个节点。

在双向链表的末尾插入新节点是一个常见的操作,本文将介绍如何在Python中实现。

更多Python相关文章,请阅读:Python 教程

双向链表的Node类

首先,我们需要定义一个Node类,表示双向链表的节点。

class Node:
    def __init__(self, data):
        self.data = data
        self.prev = None
        self.next = None

上述代码定义了一个Node类,包含三个属性:data表示节点存储的数据,prev表示指向前一个节点的指针,next表示指向后一个节点的指针。在初始化时,这三个属性的值都为None。

双向链表的类

接下来,我们需要定义一个DoublyLinkedList类,代表双向链表。这个类包含以下几个方法:

构造方法:__init__

class DoublyLinkedList:
    def __init__(self):
        self.head = None

上述代码定义了一个DoublyLinkedList类,它包含一个属性head表示链表的头节点。在初始化时,这个属性的值为None,表示链表为空。

在末尾插入新节点:append

def append(self, data):
    new_node = Node(data)
    if self.head is None:
        self.head = new_node
    else:
        cur = self.head
        while cur.next is not None:
            cur = cur.next
        cur.next = new_node
        new_node.prev = cur

上述代码定义了一个方法append,用于在双向链表的末尾插入新节点。首先创建一个新节点new_node,并将它的数据设置为方法参数data的值。然后判断链表是否为空,如果是,则将新节点设置为头节点;否则,找到链表的最后一个节点,将新节点添加到其后面。需要注意的是,双向链表下一个节点的指针既可以指向下一个节点,也可以指向上一个节点,因此在添加新节点时需要同时设置前一个节点的next指针和新节点的prev指针。

示例代码

下面是一个完整的示例代码,演示了如何使用上述类在双向链表的末尾插入新节点。

class Node:
    def __init__(self, data):
        self.data = data
        self.prev = None
        self.next = None


class DoublyLinkedList:
    def __init__(self):
        self.head = None

    def append(self, data):
        new_node = Node(data)
        if self.head is None:
            self.head = new_node
        else:
            cur = self.head
            while cur.next is not None:
                cur = cur.next
            cur.next = new_node
            new_node.prev = cur


if __name__ == '__main__':
    dll = DoublyLinkedList()
    dll.append(1)
    dll.append(2)
    dll.append(3)
    cur = dll.head
    while cur is not None:
        print(cur.data)
        cur = cur.next

上述代码创建了一个DoublyLinkedList对象dll,并向其中添加了三个节点,然后遍历整个链表,输出每个节点的数据。

结论

本文介绍了如何在Python中使用双向链表,在链表的末尾插入新节点。这是一种重要的数据结构操作,应该在编程过程中广泛应用。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程