다음은 이중 연결 리스트(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문항 이어서 보기문제·정답·해설을 한 페이지에서 이어서 볼 수 있어요비슷한 기출
- dml에해당하는sql명령으로만나열된것은? {"answer":3,"content":[{"content":"delete,update,create,alter20년-1, 2회차-정보처리기사-필기
- dml(datamanipulationlanguage)명령어가아닌것은? {"answer":3,"content":[{"content":"insert","u20년-3회차-정보처리기사-필기
- ddl(datadefinelanguage)의명령어중스키마,도메인,인덱스등을정의할때사용하는sql문은? {"answer":3,"content":[{"con21년-2회차-정보처리기사-필기