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

Python代码编写案例:如何实现链表数据结构

发布时间:2023-12-04 20:37:41

链表是一种常用的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表可以动态地插入和删除节点,相比于数组,链表具有更好的灵活性。

下面是一个用 Python 实现链表数据结构的例子:

class Node:
    def __init__(self, data):
        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_node = self.head
            while current_node.next:
                current_node = current_node.next
            current_node.next = new_node
    
    def insert(self, data, position):
        if position < 0 or position > self.length():
            print("Invalid position")
            return
        
        new_node = Node(data)
        
        if position == 0:
            new_node.next = self.head
            self.head = new_node
        else:
            current_node = self.head
            current_position = 0
            while current_position < position - 1:
                current_node = current_node.next
                current_position += 1
            new_node.next = current_node.next
            current_node.next = new_node
    
    def delete(self, data):
        if not self.head:
            print("The list is empty")
            return
        
        if self.head.data == data:
            self.head = self.head.next
        else:
            current_node = self.head
            while current_node.next and current_node.next.data != data:
                current_node = current_node.next
            if not current_node.next:
                print("Data not found")
                return
            current_node.next = current_node.next.next
    
    def length(self):
        count = 0
        current_node = self.head
        while current_node:
            count += 1
            current_node = current_node.next
        return count
    
    def display(self):
        elements = []
        current_node = self.head
        while current_node:
            elements.append(current_node.data)
            current_node = current_node.next
        print(elements)

以上是一个链表的基本实现。Node 类表示链表的节点,LinkedList 类表示链表的数据结构。append 方法用于在链表末尾添加一个节点,insert 方法用于在指定位置插入一个节点,delete 方法用于删除指定节点,length 方法返回链表的长度,display 方法用于输出链表的所有节点。

下面是使用该链表数据结构的例子:

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

# 在链表末尾添加节点
linked_list.append(1)
linked_list.append(2)
linked_list.append(3)

# 在指定位置插入节点
linked_list.insert(0, 0)
linked_list.insert(4, 4)

# 输出链表
linked_list.display()  # [0, 1, 2, 3, 4]

# 删除节点
linked_list.delete(2)

# 输出链表
linked_list.display()  # [0, 1, 3, 4]

以上示例展示了如何使用链表数据结构进行节点的添加、插入、删除等操作。链表可以灵活地进行节点的增删操作,但在访问节点时需要遍历整个链表,因此在某些场景下可能会比数组慢一些。但链表的插入和删除操作时间复杂度很低,通常用于在算法中需要频繁插入和删除节点的场景。