削除:メソッド pop(補足)

《関連記事》

末尾のノードを、リストから取り出す様子を、図解とともに解説します。

class myList(object):
    ...
    def pop(self):
        prev, node = self.head, self.head.next
        while node:
            if node==self.tail:
                value = node.item
                self.tail = prev         # (1)
                prev.next = node.next    # (2)
                del node                 # (3)
                return value
            prev, node = node, node.next
        else:
            ...


  • (1)末尾のノード self.tail は、直前のノード prev と同じ値に再設定します。すると、直前のノードが、新たな末尾のノードになります。
  • (2)直前のノードの後続 prev.next は、削除したいノードの後続 node.next と同じ値に再設定します。すると、削除したい直前のノードの後に、削除したい直後のノード(連結リストの末端)が続くようになります。
  • (3)削除したい要素を含む、オブジェクト node を削除します。