더미헤드를 갖는 연결리스트 노드 삭제
틀린코드
    def popAfter(self, prev):
        delNode = prev.next
        prev.next = delNode.next
        self.nodeCount -= 1
        return delNode.data
    def popAt(self, pos):
        if pos < 1 or pos > self.nodeCount:
            raise IndexError
        prev = self.getAt(pos -1)
        if pos == self.nodeCount:
            self.tail = prev
        return self.popAfter(prev)
수정코드
    def popAfter(self, prev):
        delNode = prev.next
        prev.next = delNode.next
        if delNode.next == None:
            self.tail = prev
        self.nodeCount -= 1
        return delNode.data
    def popAt(self, pos):
        if pos < 1 or pos > self.nodeCount:
            raise IndexError
        prev = self.getAt(pos -1)
        return self.popAfter(prev)
왜틀렸는지 분석해보자...
데이터를 갖고 있는 노드들이 모두 같은 모양을 같도록
헤드와 테일에 더미 노드를 둔다.
순환문에서 다음과 같이 처리 가능
while curr.next.next
양방향 연결 리스트 역순회
틀린코드
    def reverse(self):
        answer = []
        curr = self.tail
        while curr.prev.prev:
            answer.append(curr.prev.data)
            curr = curr.prev
        answer.append(curr.data)
        return 
수정코드
    def reverse(self):
        answer = []
        curr = self.tail
        while curr.prev.prev:
            answer.append(curr.prev.data)
            curr = curr.prev
        if curr.prev.data != None:
            answer.append(curr.prev.data)
        return answer
틀린이유
리턴 안하고 조건 수정
선생님 코드
def traverse(self):
        result = []
        curr = self.head
        while curr.next.next:
            curr = curr.next
            result.append(curr.data)
        return result
더 깔끔하다...
데이터가 None 인거지 헤드와 테일이 None이 아니다.
양방향 연결 리스트 노드 삽입
틀린 코드
    def insertBefore(self, next, newNode):
        prevNode = next.prev
        prevNode.next = newNode
        next.prev = newNode
        newNode.prev = prevNode
        newNode.next = next
틀린이유
노드카운트 증가와 트루 리턴 안함
양방향 연결 리스트 삭제
틀린코드
    def popAfter(self, prev):
        delNode = prev.next
        prev.next = delNode.next
        delNode.next.prev = prev
        self.nodeCount -= 1
        return delNode.data
    def popBefore(self, next):
        delNode = next.prev
        delNode.prev.next = next
        next.prev = delNode.prev
        self.nodeCount -= 1
        return delNode.data
    def popAt(self, pos):
        if pos < 1 or pos > self.nodeCount +1:
            raise IndexError
        return self.popAfter(self.getAt(pos-1))
틀린이유 popAt 조건문에 +1 삭제
양방향 연결 리스트의 병합
틀린코드
    def concat(self, L):
        last = self.getAt(self.nodeCount)
        last.next = L.getAt(1)
        L.getAt(1).prev = last
        self.nodeCount += L.nodeCount
조건 넣어서 수정했으나 또 틀린 코드
    def concat(self, L):
        if self.nodeCount == 0 and L.nodeCount > 0:
            self = L
        elif self.nodeCount > 0 and L.nodeCount > 0:
            last = self.getAt(self.nodeCount)
            last.next = L.getAt(1)
            L.getAt(1).prev = last
            self.tail.prev = L.getAt(L.nodeCount)
            self.nodeCount += L.nodeCount
최종 수정 코드
    def concat(self, L):
        if self.nodeCount == 0 and L.nodeCount > 0:
            self.head.next = L.getAt(1)
            self.tail.prev = L.getAt(L.nodeCount)
            self.nodeCount += L.nodeCount
        elif self.nodeCount > 0 and L.nodeCount > 0:
            last = self.getAt(self.nodeCount)
            last.next = L.getAt(1)
            L.getAt(1).prev = last
            self.tail.prev = L.getAt(L.nodeCount)
            self.nodeCount += L.nodeCount