<알고리즘 문제풀이&연습>/[C++] 백준, 프로그래머스 등등

[C 자료구조] Linked Lists - Reverse a linked list

BlockDMask 2017. 7. 4. 13:56


0) 제목

  • Hackerrank 의 Linked Lists 부분의 Reverse a linked list 문제입니다.

  • C언어를 이용하여 풀었습니다.

1) 문제설명

  • Reverse 함수의 파라미터로 들어오는 Node 구조체의 포인터 (head pointer of Linked lists)를 받아서 역순으로 연결하여 return 하는 문제입니다.

  • input) 2 -> 4 -> 7 -> NULL

  • output) 7-> 4 -> 2-> NULL

2) 풀이과정

  • 오리지널노드의 head->next를 가리킬 노드 포인터(curNode) 하나,

  • 역순 노드의 헤드가 될 노트 포인터(tail) 하나를 만들어 

  • 하나씩 이동하면서 역순으로 셋팅하도록 구현했습니다.

3) 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*
  typedef struct _node
  {
     int data;
     struct _node *next;
  } Node;
*/
 
 
Node* Reverse(Node *head)
{
    Node * tail= NULL;     // 새로 역순으로 만들어질 노드의 헤드 포인터.
    Node * curNode;        // 남아있는 오리지널 노드의 주소를 가리킬 포인터.
    while(head != NULL){
        curNode = head->next;
        head->next = tail;
        tail = head;
        head = curNode;
    }
    return tail;
}
 
cs


주석 내부에 있는 부분은 C언어 문법에 맞게 고쳤습니다.

(Hackerrank 에서는 C++ 문법으로 지원)

경로 : Dashboard>Data Structures>Linked Lists>Reverse a linked list

출처 : [HackerRank] https://www.hackerrank.com/challenges/reverse-a-linked-list/problem