欢迎访问宙启技术站
智能推送

Python编程实现链表数据结构

发布时间:2023-12-04 11:36:39

链表是一种常用的数据结构,它由节点(Node)组成,每个节点包含了数据和指向下一个节点的引用。链表可以用来表示任意长度的数据序列,其插入和删除操作的时间复杂度为O(1)。

以下是使用Python实现链表的示例代码:

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


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

    def is_empty(self):
        return self.head is None

    def append(self, data):
        new_node = Node(data)
        if self.is_empty():
            self.head = new_node
        else:
            current = self.head
            while current.next:
                current = current.next
            current.next = new_node

    def insert_at_beginning(self, data):
        new_node = Node(data)
        new_node.next = self.head
        self.head = new_node

    def delete(self, data):
        if self.is_empty():
            return
        
        if self.head.data == data:
            self.head = self.head.next
            return
     
        current = self.head
        while current.next:
            if current.next.data == data:
                current.next = current.next.next
                return
            current = current.next

    def print_list(self):
        current = self.head
        while current:
            print(current.data, end=" ")
            current = current.next
        print()

上面的代码中,Node类表示链表的节点,LinkedList类表示整个链表。在LinkedList类的构造函数中,我们初始化一个空链表,头结点(head)被设置为None。is_empty()方法用于判断链表是否为空。

append()方法用于向链表末尾添加一个节点,如果链表为空,直接将新节点设置为头结点,否则遍历链表到最后一个节点,将新节点设置为最后一个节点的后继。

insert_at_beginning()方法用于在链表的头部插入一个节点。首先创建一个新节点,并将其后继设置为当前头结点,然后将新节点设置为头结点。

delete()方法用于删除链表中指定的数据。首先判断链表是否为空,然后判断头结点是否是要删除的节点,如果是,直接将头结点的后继设置为新的头结点。否则,遍历链表,一旦找到要删除的节点,将前一个节点的后继设置为要删除节点的后继。

print_list()方法用于遍历链表并打印每个节点的数据。

下面是使用链表的示例代码:

# 创建一个链表对象
llist = LinkedList()

# 向链表末尾添加节点
llist.append(1)
llist.append(2)
llist.append(3)
llist.append(4)

# 在链表头部插入节点
llist.insert_at_beginning(0)

# 打印链表
llist.print_list()  # 输出:0 1 2 3 4

# 删除节点
llist.delete(2)

# 打印链表
llist.print_list()  # 输出:0 1 3 4

在上面的示例中,我们首先创建了一个LinkedList对象,并向链表中添加了一些节点。然后,在链表的头部插入了一个新的节点。最后,我们删除了一个节点,并打印了链表的内容。

这是一个简单的使用链表数据结构的示例,链表还有其他许多操作,如反转链表、查找链表中的元素、合并两个有序链表等等。