본문 바로가기
HackerRank

Print in Reverse(Linked List)

by Doromi 2023. 10. 8.
728x90
반응형
주어진 연결 리스트(Linked List)의 요소를 역순으로 출력하는 알고리즘 문제입니다. 이 문제의 목표는 주어진 연결 리스트의 요소를 뒤에서부터 앞으로 역순으로 출력하는 것입니다.

연결 리스트는 데이터 요소(Node)로 이루어진 데이터 구조로, 각 노드는 데이터와 다음 노드를 가리키는 링크(또는 포인터)로 구성됩니다. 연결 리스트의 끝을 나타내는 노드는 다음 노드를 가리키는 링크가 없는 특별한 노드일 수 있습니다.

문제 설명:
문제의 입력으로는 연결 리스트의 시작 노드가 주어집니다. 이 연결 리스트를 뒤에서부터 앞으로 역순으로 출력해야 합니다.

알고리즘 절차:

재귀 함수 또는 스택(stack)을 사용하여 연결 리스트를 역순으로 출력합니다.
연결 리스트의 맨 끝까지 이동한 후, 마지막 노드의 데이터를 출력합니다.
이전 노드로 이동하고, 이전 노드의 데이터를 출력합니다.
이전 노드에서 이전 노드로 계속 이동하고, 데이터를 출력합니다.
이렇게 하면 연결 리스트를 역순으로 출력할 수 있습니다.

스택을 사용한 예시:

void reversePrint(SinglyLinkedListNode* llist) {
    stack<int> s;
    SinglyLinkedListNode* current = llist;
    while(current){
        s.push(current->data);
        current= current->next;
    }
    while(!s.empty()){
        cout<<s.top()<<endl;
        s.pop();
    }
}

재귀 함수를 사용한 예시:

void printReverse(SinglyLinkedListNode* head) {
    if (head == nullptr) {
        return; // 기저 조건: 노드가 끝에 도달하면 재귀 종료
    }
    
    // 다음 노드로 이동하고 재귀적으로 호출
    printReverse(head->next);
    
    // 현재 노드의 데이터 출력
    cout << head->data << endl;
}
728x90
반응형

'HackerRank' 카테고리의 다른 글

Compare two linked lists  (0) 2023.10.09
Reverse a linked list  (0) 2023.10.08
Delete a Node  (0) 2023.10.07
Insert a node at a specific position in a linked list  (0) 2023.10.07
Insert a node at the head of a linked list  (0) 2023.10.07