모두CBT

다음은 이중 연결 리스트(doubly linked list)를 구현한 … | [7급 국가직 자료구조론] 26년 1회차 기출문제 상세 페이지

1[7급 국가직 자료구조론] 26년 1회차
다음은 이중 연결 리스트(doubly linked list)를 구현한 C 코드이다. 노드 삭제 함수의 빈칸에 들어갈 내용으로 옳은 것은?
typedef int element;
typedef struct DListNode {
element data;
struct DListNode *llink;
struct DListNode *rlink;
} DListNode;
DListNode *head = NULL;

void init() {
head = (DListNode*)malloc(sizeof(DListNode));
head->llink = head->rlink = head;
}

void dinsert(DListNode *inode, DListNode *inserted) {
inserted->llink = inode;
inserted->rlink = inode->rlink;
inode->rlink->llink = inserted;
inode->rlink = inserted;
}

void ddelete(DListNode *removed) {
if(removed == head) return;
removed->llink->rlink = removed->rlink;
[ ]
free(removed);
}
1
removed->rlink->llink = removed->llink;
2
removed->rlink->llink = removed->rlink;
3
removed->llink = removed->rlink->llink;
4
removed->rlink = removed->rlink->llink;
해설

빈칸에는 removed->rlink->llink = removed->llink;가 들어간다.

이중 연결 리스트에서 노드를 떼어 내려면 왼쪽 이웃의 rlink는 오른쪽 이웃을, 오른쪽 이웃의 llink는 왼쪽 이웃을 가리키도록 양방향 링크를 모두 갱신해야 한다. 앞 줄이 왼쪽 이웃의 rlink를 처리했으므로 빈칸은 오른쪽 이웃의 llink를 처리한다.

  • 오른쪽 이웃의 llink에 removed->rlink를 넣으면 오른쪽 노드가 자기 자신을 가리키게 되어 역방향 연결이 끊긴다.
  • removed->llink = removed->rlink->llink;는 곧 해제될 노드 자신의 llink만 바꿀 뿐 오른쪽 이웃의 llink는 여전히 삭제된 노드를 가리킨다.
  • removed->rlink = removed->rlink->llink;도 해제될 노드 자신의 rlink만 바꾸므로 오른쪽 이웃의 역방향 링크가 갱신되지 않는다.

오류나 개정된 내용이 보이면 알려주세요

이어서 풀어보기

[7급 국가직 자료구조론] 26년 1회차 25문항 이어서 보기문제·정답·해설을 한 페이지에서 이어서 볼 수 있어요7급 국가직 자료구조론 기출문제 암기장 전체 보기