python实现数据结构——链表 Python

链表(Linked List) 链表由一系列 节点 组成,每个节点包含 数据域 和 指向下一个节点的指针。高中阶段主要学习 单向链表。 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 add_first(self, data):
        """在链表头部插入节点"""
        new_node = Node(data)
        new_node.next = self.head
        self.head = new_node

    def add_last(self, data):
        """在链表尾部插入节点"""
        new_node = Node(data)
        if self.is_empty():
            self.head = new_node
            return
        current = self.head
        while current.next:   # 找到最后一个节点
            current = current.next
        current.next = new_node

    def remove_first(self):
        """删除头节点并返回其数据"""
        if self.is_empty():
            raise IndexError("链表为空")
        removed_data = self.head.data
        self.head = self.head.next
        return removed_data

    def remove_last(self):
        """删除尾节点并返回其数据"""
        if self.is_empty():
            raise IndexError("链表为空")
        # 只有一个节点的情况
        if self.head.next is None:
            removed_data = self.head.data
            self.head = None
            return removed_data
        # 找到倒数第二个节点
        current = self.head
        while current.next.next:
            current = current.next
        removed_data = current.next.data
        current.next = None
        return removed_data

    def traverse(self):
        """遍历链表并打印所有数据"""
        elements = []
        current = self.head
        while current:
            elements.append(str(current.data))
            current = current.next
        print(" -> ".join(elements) if elements else "空链表")

    def search(self, target):
        """查找链表中是否存在目标值"""
        current = self.head
        while current:
            if current.data == target:
                return True
            current = current.next
        return False
2. 使用实例
PYTHON
# 创建链表
ll = LinkedList()
print("初始链表:")
ll.traverse()          # 空链表

# 添加元素
ll.add_last(10)
ll.add_last(20)
ll.add_first(5)
ll.add_last(30)
print("添加元素后:")
ll.traverse()          # 5 -> 10 -> 20 -> 30

# 删除操作
print("删除头节点:", ll.remove_first())  # 5
print("删除尾节点:", ll.remove_last())   # 30
ll.traverse()          # 10 -> 20

# 查找
print("查找20:", ll.search(20))   # True
print("查找99:", ll.search(99))   # False
--- 总结对比 数据结构 特点 主要操作 应用场景 栈 后进先出(LIFO) push, pop, peek 函数调用、括号匹配 队列 先进先出(FIFO) enqueue, dequeue, front 任务调度、缓冲区 链表 动态节点,无需连续内存 插入、删除、遍历 实现其他结构(如队列)
← 返回列表

评论 (0)

登录后可以发表评论

立即登录
💬

还没有评论,快来发表第一条评论吧!