수정 전 기준점 고정
대상 노드, 이전 노드, 다음 노드를 먼저 잡고 빈 리스트와 단일 노드를 분리합니다.
삭제와 삽입은 코드 한 줄보다 head, tail, prev, next 불변식을 끝까지 보존하는지로 검증합니다.
대상 노드, 이전 노드, 다음 노드를 먼저 잡고 빈 리스트와 단일 노드를 분리합니다.
단일 리스트는 prev.next, 이중 리스트는 prev.next와 next.prev를 함께 갱신합니다.
head 삭제, tail 삭제, 단일 노드 삭제를 따로 실행해 끊어진 참조를 찾습니다.
head = head.next가 먼저입니다. prev가 없다는 사실을 조건으로 분리합니다.
tail을 유지한다면 tail 갱신을 빼먹지 않아야 역참조가 깨지지 않습니다.
head와 tail이 같은 노드를 가리키므로 둘 다 비우는 케이스를 별도 테스트로 고정합니다.