본문 바로가기

c언어 스터디/HackerRank

[HackerRank] Get Node Value

Get Node Value | HackerRank

 

Get Node Value | HackerRank

Given the head of a linked list, get the value of the node at a given position when counting backwards from the tail.

www.hackerrank.com

 

<문제>

input: 첫번째 줄에는 총 테스트 할 개수를 입력받고, 두번째 줄부터 테스트 개수만큼 리스트를 입력받는다.

리스트를 입력하는 방법은 첫번째 줄에 리스트의 element 개수를 입력하고, 다음줄부터 element 개수만큼 data를 입력한다. 마지막 줄에는 tail로부터 거리를 알려주는 positionFromTail을 입력받는다.

 

output: tail node로부터 입력받은 거리만큼 떨어진 곳의 data값을 출력한다.

 

<코드>

int getNode(SinglyLinkedListNode* llist, int positionFromTail) {
    SinglyLinkedListNode* current = llist;
    SinglyLinkedListNode* next=NULL;
    SinglyLinkedListNode* prev=NULL;
    while(current!=NULL){
        next=current->next;
        current->next=prev;
        prev=current;
        current=next;
    }
    llist=prev;
    for(int i=0;i<positionFromTail;i++){
        llist = llist->next;
    }
    return llist->data;
}

 

<풀이>

현재 가리키고 있는 current 노드, 다음을 가리키는 next 노드, 이전 값을 가리키는 prev 노드를 각각 선언했다.
tail 노드부터 거꾸로 count해야하므로 list를 뒤집어야 한다. current가 null일 때까지 while 반복문을 통해 next= current->next, current->next=prev를 통해 이전 값을 current가 다음으로 가리키도록 하고, 현재 값을 prev에 입력하고 다음 값을 current에 입력하여 뒤에서부터 앞으로 리스트가 스캔되도록 하였다. 그 다음에는 llist가 prev를 가리키도록 하고 positionFromTail의 크기만큼 next를 가리키게 한 다음, llist가 가리키는 데이터 값을 리턴하여 문제를 풀 수 있었다.

 

 

<실행결과>

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

[HackerRank] Jumping on the Clouds: Revisited  (0) 2021.09.11
[HackerRank] Counting Valleys  (0) 2021.08.28
[HackerRank] Cycle Detection  (0) 2021.08.21
[HackerRank] Plus Minus  (0) 2021.08.21
[HackerRank] Compare two linked lists  (0) 2021.08.14