-
카테고리
-
세부 분야
게임 프로그래밍
-
해결 여부
미해결
연결리스트 구현
21.08.05 16:17 작성 조회수 153
0
public void Remove(MyLinkedListNode<T> room) { if(Head == room) { Head = Head.Next; } if(Tail == room) { Tail = Tail.Prev; } if(room.Prev != null) { room.Prev.Next = room.Next; if(room.Next != null) { room.Next.Prev = room.Prev; } Count--; }
저는 여기서 room.Prev != null 부분과 room.Next != null 판별 부분이 왜 필요한지 의문을 가지게 됐습니다!
앞서 Head == room 부분과 Tail ==room 부분에서 이미 예외적인 경우를 체크 했기 때문에 그 외의 경우는 당연히 room.Next와 room.Prev는 null이 아니기 떄문에 굳이 쓸 이유가 없다고 생각했습니다. 그래서 저는
room.Prev.Next = room.Next; room.Next.Prev = room.Prev;
이부분은 무조건 실행 돼야 했다고 생각했습니다. 최종적으로 public void Remove(MyLinkedListNode<T> room) { if(Head == room) { Head = Head.Next; } if(Tail == room) { Tail = Tail.Prev; } room.Prev.Next = room.Next; room.Next.Prev = room.Prev; Count--; }
null 판단 부분을 지우고 브레이크 포인트를 잡아서 실행을 했는데 차이가 없었습니다. 혹시 다른 측면에서 문제가 있을까요??
답변을 작성해보세요.
0
0
Rookiss
지식공유자2021.08.05
Head == room 부분과 Tail ==room 부분에서 이미 예외적인 경우를 체크 했기 때문에 그 외의 경우는 당연히 room.Next와 room.Prev는 null이 아니기 떄문에 굳이 쓸 이유가 없다고 생각했습니다
Head를 조작한 것이지, 딱히 room을 조작한 것은 아닙니다.
데이터를 딱 1개 넣어보고 다시 삭제해보거나,
터뜨릴 수 있는 케이스를 유도해보시면 되겠네요.
답변 2