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

Python中如何实现链表数据结构

发布时间:2023-12-04 21:19:41

链表(Linked List)是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。相比于数组,链表的优势在于可以在O(1)的时间复杂度内进行插入和删除操作。

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

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

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

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

    def insert(self, data, position):
        new_node = Node(data)
        if position == 0:
            new_node.next = self.head
            self.head = new_node
        else:
            current = self.head
            for _ in range(position - 1):
                if current.next:
                    current = current.next
                else:
                    raise IndexError("Position out of range")
            new_node.next = current.next
            current.next = new_node

    def delete(self, data):
        if not self.head:
            raise ValueError("List is empty")
        if self.head.data == data:
            self.head = self.head.next
        else:
            current = self.head
            while current.next:
                if current.next.data == data:
                    current.next = current.next.next
                    return
                current = current.next
            raise ValueError("Data not found")

    def search(self, data):
        current = self.head
        while current:
            if current.data == data:
                return True
            current = current.next
        return False

    def __str__(self):
        values = []
        current = self.head
        while current:
            values.append(str(current.data))
            current = current.next
        return "->".join(values)

以上代码实现了一个单向链表,包括了向链表末尾追加节点、向指定位置插入节点、删除制定值的节点、搜索链表中是否包含某个值等功能。

下面是使用示例:

# 创建一个空链表
my_list = LinkedList()

# 向链表末尾追加节点
my_list.append(1)
my_list.append(2)
my_list.append(3)
print(my_list)  # 输出:1->2->3

# 向指定位置插入节点
my_list.insert(4, 1)
print(my_list)  # 输出:1->4->2->3

# 删除节点
my_list.delete(2)
print(my_list)  # 输出:1->4->3

# 搜索节点
print(my_list.search(4))  # 输出:True
print(my_list.search(5))  # 输出:False

通过以上示例,我们可以看到链表的基本使用方法,和其它数据结构相比,链表可以更加高效地进行插入和删除操作。但是链表的查找操作效率较低,需要遍历整个链表。