class Node:
    Node *prev
    Node *next
    key

class LinkedList:
    Node *sentinel  # 哨兵

    # 初始化为空链表
    init():
        sentinel ← 生成节点
        sentinel.next ← sentinel  # 指向自身
        sentinel.prev ← sentinel  # 指向自身

    # 插入数据 data
    insert(data):
        # 生成节点,设置数据和指针
        Node *x ← 生成节点
        x.key ← data # 设置数据
        x.next ← sentinel.next
        x.prev ← sentinel
        # 设置哨兵和原来的开头节点的指针
        sentinel.next.prev ← x
        sentinel.next ← x

    # 搜索持有 k 的节点
    listSearch(k):
        Node *cur ← sentinel.next # 从哨兵的下一个元素开始追溯
        while cur ≠ sentinel and cur.key ≠ k:
            cur ← cur.next
        return cur

    deleteNode(Node *t):
        if t = sentinel: return # 如果 t 是哨兵,则不处理
        t.prev.next ← t.next
        t.next.prev ← t.prev
        释放 t 的内存

    # 删除持有 k 的节点
    deleteKey(k):
        deleteNode(listSearch(k)) # 删除得到的节点