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 |