(데이터 구조) 원형 이중 연결 리스트 코드(Python)

class node:
    def __init__(self, key=None):
        self.key = key
        self.next = self
        self.prev = self

    def __str__(self):
        return str(self.key)


class doublyLinkedList:
    def __init__(self):
        self.head = node()
        self.size = 0

    def splice(self, nodeA, nodeB, nodeT):
        temp = nodeA
        boolHead = False
        boolTarget = False
        while (temp != nodeB):
            temp = temp.next
            if (temp.key == None):
                print("There is a head between nodeA and nodeB!")
                boolHead = True
                return None
            elif (temp.key == nodeT):
                print("There is a target between nodeA and nodeB!")
                boolHead = True
                return None
            else:
                continue
        if (boolHead == False and boolTarget == False):
            prevA = nodeA.prev
            nextB = nodeB.next
            nextT = nodeT.next

            prevA.next = nextB
            nextB.prev = prevA

            nodeT.next = nodeA
            nodeA.prev = nodeT

            nodeB.next = nextT
            nextT.prev = nodeB

    def moveAfter(self, nodeA, nodeT):
        self.splice(nodeA, nodeA, nodeT)

    def moveBefore(self, nodeA, nodeT):
        self.splice(nodeA, nodeA, nodeT.prev)

    def insertAfter(self, nodeT, key):
        nodeN = node(key)
        self.moveAfter(nodeN, nodeT)
        self.size += 1

    def insertBefore(self, nodeT, key):
        nodeN = node(key)
        self.moveBefore(nodeN, nodeT)
        self.size += 1

    def pushFront(self, key):
        self.insertAfter(self.head, key)

    def pushBack(self, key):
        self.insertBefore(self.head, key)

    def search(self, key):
        temp = self.head
        while (temp.next != self.head):
            if (temp.key == key):
                return temp
            else:
                temp = temp.next
            if (temp.next == self.head):
                if (temp.key == key):
                    return temp
                else:
                    continue
        return None

    def remove(self, nodeT):
        if (nodeT == None or nodeT == self.head):
            print("There is no target node!")
            return None
        nodeT.prev.next = nodeT.next
        nodeT.next.prev = nodeT.prev
        del nodeT
        self.size -= 1

    def popFront(self):
        if (self.size == 0):
            print("There is no target node!")
        else:
            self.remove(self.head.next)

    def popBack(self):
        if (self.size == 0):
            print("There is no target node!")
        else:
            self.remove(self.head.prev)

    def __len__(self):
        return int(self.size)

    def printList(self):
        temp = self.head
        while (temp.next != self.head):
            print(temp)
            temp = temp.next
            if (temp.next == self.head):
                print(temp)
            else:
                continue
        return None

# Test
L = doublyLinkedList()
L.pushFront(50)
L.pushFront(40)
L.pushFront(30)
L.pushFront(20)
L.pushFront(10)
L.pushBack(100)
L.remove(L.search(30))
L.printList()
print(len(L))
L.splice(L.search(10), L.search(40), L.search(100))
L.printList()