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)) # 取得したノードを削除