Just do it
专注做自己的事,有想做的事就去做好了
  • 定义链表
class ListNode:  
    def __init__(self, value):  
        self.val = value  # 节点存储的值  
        self.prev = None  # 指向前一个节点的指针  
        self.next = None  # 指向后一个节点的指针
  • 定义双端队列
class DoublyLinedList:  
    def __init__(self):  
        self.head = None  # 链表头节点  
        self.tail = None  # 链表尾节点  
        self.size = 0  # 链表长度
  • 判空
def is_empty(self):  
    """检查链表是否为空"""  
    return self.size == 0
  • 查看元素个数
def get_size(self):  
    """获取链表长度"""  
    return self.size
  • 队列头部插入元素
def add_at_head(self, value):  
    """在链表头部添加节点"""  
    # 创建新节点  
    node = ListNode(value)  
  
    # 如果链表为空,新节点既是头节点也是尾节点  
    if self.size == 0:  
        self.head = node  
        self.tail = node  
    else:  
        # 链表不为空时,将新节点插入到头部  
        node.next = self.head  # 新节点的next指向原头节点  
        self.head.prev = node  # 原头节点的prev指向新节点  
        self.head = node  # 更新头节点为新节点  
  
    self.size += 1  # 链表长度加1  
    return self.size
  • 队列尾部插入元素
def add_at_tail(self, value):  
    """在链表尾部添加节点"""  
    # 创建新节点  
    node = ListNode(value)  
  
    # 如果链表为空,新节点既是头节点也是尾节点  
    if self.size == 0:  
        self.head = node  
        self.tail = node  
    else:  
        # 链表不为空时,将新节点插入到尾部  
        node.prev = self.tail  # 新节点的prev指向原尾节点  
        self.tail.next = node  # 原尾节点的next指向新节点  
        self.tail = node  # 更新尾节点为新节点  
  
    self.size += 1  # 链表长度加1  
    return self.size
  • 查看队列头元素的值
def peek_at_head(self):  
    """查看头节点的值(不删除节点)"""  
    if self.size == 0:  
        raise Exception("DoublyLinkedList is empty")  
    return self.head.val
  • 查看队列尾元素的值
def peek_at_tail(self):  
    """查看尾节点的值(不删除节点)"""  
    if self.size == 0:  
        raise Exception("DoublyLinkedList is empty")  
    return self.tail.val
  • 从队列头部弹出
def pop_at_head(self):  
    """删除并返回头节点的值"""  
    if self.size == 0:  
        raise Exception("DoublyLinkedList is empty")  
  
    # 保存头节点的值用于返回  
    head_value = self.head.val  
  
    # 如果链表中只有一个节点  
    if self.head == self.tail:  
        self.head = self.tail = None  # 清空链表  
    else:  
        # 链表中有多个节点  
        next_node = self.head.next  # 保存头节点的下一个节点  
        next_node.prev = None  # 断开原头节点与后续节点的连接  
        self.head = next_node  # 更新头节点为下一个节点  
  
    self.size -= 1  # 链表长度减1  
    return head_value  # 返回被删除节点的值
  • 从队列尾部弹出
def pop_at_tail(self):  
    """删除并返回尾节点的值"""  
    if self.size == 0:  
        raise Exception("DoublyLinkedList is empty")  
  
    # 保存尾节点的值用于返回  
    tail_value = self.tail.val  
  
    # 如果链表中只有一个节点  
    if self.head == self.tail:  
        self.head = self.tail = None  # 清空链表  
    else:  
        # 链表中有多个节点  
        prev_node = self.tail.prev  # 保存尾节点的前一个节点  
        prev_node.next = None  # 断开原尾节点与前驱节点的连接  
        self.tail = prev_node  # 更新尾节点为前一个节点  
  
    self.size -= 1  # 链表长度减1  
    return tail_value  # 返回被删除节点的值å
posted on 2025-10-01 20:13  Ireck  阅读(9)  评论(0)    收藏  举报