Python3 双向链表

双向链表

双向链表:每一个元素都是一个对象,每个对象有一个关键字key和两个指针:next和prev
在双向链表的实现中,使用一个伪头部(dummy head)和伪尾部(dummy tail)标记界限,这样在添加节点和删除节点的时候就不需要检查相邻的节点是否存在。

  • 双向链表:每一个元素都是一个对象(DLinkedNode类的实例),每个对象有一个关键字key和两个指针:next和prev
class DLinkedNode:
    def __init__(self, key=0, value=0):
        self.key = key
        self.value = value #内容区域,可自定义多个字段
        self.prev = None
        self.next = None # 指针区域 , 双向链表有两个指针
  • 双向链表LIST
class DLinkedNodeList:
    def __init__(self):
        # 使用伪头部和伪尾部节点(更方便不用循环遍历出没有next是尾部)
        self.head = DLinkedNode()
        self.tail = DLinkedNode()
        # 首尾相链
        self.head.next = self.tail
        self.tail.prev = self.head
    # 添加一个新元素在链表尾部
    def add_to_tail(node):
    	# 新增的节点 前后指针赋值
        node.prev = self.tail.prev
        node.next = self.tail
        # 因为是双线链表 新增位置的前一个节点的next 和后一节点的prev 也要链接上
        self.tail.prev.next = node
        self.tail.prev = node
    # 添加一个新元素在链表头部
    def add_to_head(node):
        node.prev = self.head
        node.next = self.head.next
        self.head.next.prev = node
        self.head.next = node
    def remove(node):
    	# 移除: 只需把前后节点的 next,prev 指针跳过移除的元素 链接
        node.next.prev =node.prev
        node.prev.next = node.next
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章