74.5 연습문제: 특정 노드 검색하기
다음 소스 코드에서 findNode 함수를 완성하세요. 이 함수는 연결 리스트를 순회하면서 지정된 값이 들어있는 노드를 찾아야 합니다.
practice_linked_list_find_node.c
#include <stdio.h> #include <stdlib.h> struct NODE { struct NODE *next; int data; }; void addFirst(struct NODE *target, int data) { struct NODE *newNode = malloc(sizeof(struct NODE)); newNode->next = target->next; newNode->data = data; target->next = newNode; } struct NODE *findNode(struct NODE *node, int data) { _________________________________ ... _________________________________ } int main() { struct NODE *head = malloc(sizeof(struct NODE)); head->next = NULL; addFirst(head, 10); addFirst(head, 20); addFirst(head, 30); struct NODE *found = findNode(head, 20); printf("%d\n", found->data); struct NODE *curr = head->next; while (curr != NULL) { struct NODE *next = curr->next; free(curr); curr = next; } free(head); return 0; }
실행 결과
20
정답
if (node == NULL) return NULL; struct NODE *curr = node->next; while (curr != NULL) { if (curr->data == data) return curr; curr = curr->next; } return NULL;
해설
단일 연결 리스트는 특정 노드를 찾으려면 첫 번째 노드부터 마지막 노드까지 차례대로 검색해야 합니다. 따라서 while (curr != NULL)과 같이 NULL이 아닐 때 계속 반복합니다. 여기서 if (curr->data == data)와 같이 현재 노드의 데이터와 매개변수로 받은 데이터를 비교하여 같으면 현재 노드를 반환하고, 다르면 다음 노드로 넘어가면 됩니다.
만약 값을 찾지 못했거나 처음부터 node가 NULL이라면 NULL을 반환합니다