다음 C 코드의 reverseList()는 단순 연결 리스트에 있는 노… | [7급 국가직 자료구조론] 22년 1회차 기출문제 상세 페이지
1[7급 국가직 자료구조론] 22년 1회차
다음 C 코드의 reverseList()는 단순 연결 리스트에 있는 노드의 순서를 역순으로 만드는 함수이다. (가)~(다)에 들어갈 내용을 바르게 연결한 것은?struct node {
int data;
struct node *link;
} *head;
void reverseList() {
struct node *prevNode, *curNode;
prevNode = head;
curNode = head;
head = NULL;
while ( [ (가) ] ) {
curNode = curNode->link;
prevNode->link = head;
[ (나) ] ;
[ (다) ] ;
}
}(가) (나) (다)1
curNode != NULL head = curNode curNode = prevNode
2
curNode != NULL head = prevNode prevNode = curNode
3
head != NULL head = curNode curNode = prevNode
4
head != NULL head = prevNode prevNode = curNode
해설
(가) curNode != NULL, (나) head = prevNode, (다) prevNode = curNode이다.
prevNode는 이번에 뒤집을 노드, curNode는 다음 노드를 미리 잡아 두는 포인터, head는 이미 뒤집힌 부분의 첫 노드이다. 반복마다 prevNode의 링크를 head로 돌리고, head를 prevNode로, prevNode를 curNode로 한 칸씩 전진시킨다.
a→b→c를 추적하면 head가 a, b, c로 바뀌며 c→b→a가 되고, curNode가 NULL이 된 반복에서 마지막 노드까지 처리된 뒤 종료한다.
- curNode != NULL, head = curNode, curNode = prevNode: head가 아직 뒤집지 않은 노드를 가리키고 포인터가 앞으로 나아가지 않는다.
- head != NULL, head = curNode, curNode = prevNode: 시작 시 head가 NULL이라 반복이 실행되지 않는다.
- head != NULL, head = prevNode, prevNode = curNode: 갱신 순서는 맞지만 시작 시 head가 NULL이라 반복에 들어가지 못한다.
오류나 개정된 내용이 보이면 알려주세요