본문 바로가기

c언어 스터디/HackerRank

[HackerRank] Print in Reverse

Print in Reverse | HackerRank

 

Print in Reverse | HackerRank

Print the elements of a linked list in reverse order, from tail to head

www.hackerrank.com

 

 

<문제>

input으로 하나의 list를 입력받으면, list를 반대로 출력하는 문제이다.

 

<코드>

void reversePrint(SinglyLinkedListNode* llist) {
    struct SinglyLinkedListNode *head=llist;
    if(head==NULL){
        return;
    }
    else{
        reversePrint(head->next);
        printf("%d\n",head->data);
    }
}

 

<풀이>

for 반복문으로 풀다가 재귀함수를 사용하면 코드가 더 간단해질 거 같아 재귀함수를 사용했다.

먼저 head 포인터가 llist를 가리키게 하였고, 만약 head가 null이라면 재귀함수가 linked list의 마지막을 가리키고 있다는 것이므로 그냥 리턴만 하였다. 조건식이 거짓이라면 reversePrint(head->next) 문장이 실행된다. 이 재귀함수는 head가 리스트의 마지막까지 갈 때까지 반복되고, 리스트의 마지막에 도착한다면 printf()를 통해 리스트를 거꾸로 하나씩 출력하게 하여 문제를 풀었다.

 

<실행결과>

 

'c언어 스터디 > HackerRank' 카테고리의 다른 글

[HackerRank] Drawing Book  (0) 2021.07.27
[HackerRank] Utopian Tree  (0) 2021.07.27
[HackerRank] Sales by Match  (0) 2021.07.22
[HackerRank] Strong Password  (0) 2021.07.22
[HackerRank] Reverse a linked list  (0) 2021.07.22