0) 제목
Hackerrank 의 Linked Lists 부분의 Reverse a doubly linked list 문제입니다.
C언어를 이용하여 풀었습니다.
http://blockdmask.tistory.com/14 과 80퍼센트 동일.
1) 문제설명
더블 링크드 리스트를 역순으로 만드는 문제입니다. 이전에 푼 싱글 링크드 리스트 역순과 거의 비슷합니다.
input) NULL<- 1 <-> 2 <-> 3 -> NULL
output) NULL <- 3 <-> 2 <-> 1-> 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 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | /* Reverse a doubly linked list, input list may also be empty Node is defined as typedef struct _Node { int data; struct _Node *next; struct _Node *prev; } Node ; */ Node* Reverse(Node* head) { //null node if(head == NULL) return NULL; //only one node. if(head->next == NULL) return head; Node * tail = head->prev; Node * curNode; while(1){ if(head->next == NULL) break; curNode = head->next; tail = head; tail->next = head->prev; tail->prev = head->next; head = curNode; } //last Node curNode = tail; tail = head; head->next = tail->prev; tail->next = curNode; head = tail; return head; } | cs |
4) 인증
주석 내부에 있는 부분은 C언어 문법에 맞게 고쳤습니다.
(Hackerrank 에서는 C++ 문법으로 지원)
경로 : Dashboard>Data Structures>Linked Lists>Reverse a doubly linked list
출처 : [HackerRank] https://www.hackerrank.com/challenges/reverse-a-doubly-linked-list
'<알고리즘 문제풀이&연습> > [C++] 백준, 프로그래머스 등등' 카테고리의 다른 글
[C 자료구조] Tree - Is This a Binary Search Tree? (0) | 2017.07.11 |
---|---|
[C++ 상속/virtual] Virtual Functions (가상함수) (0) | 2017.07.10 |
[C++ 동적할당] Variable Sized Arrays (배열) (0) | 2017.07.08 |
[C 자료구조] Stack - Balanced Brackets (0) | 2017.07.07 |
[C 자료구조] Heap - QHEAP1 (0) | 2017.07.05 |
[C 자료구조] Tree - Level Order Traversal (0) | 2017.07.05 |
[C 자료구조] Linked Lists - Reverse a linked list (0) | 2017.07.04 |
[C 자료구조] Linked Lists - Inserting a Node Into a Sorted Doubly Linked List (0) | 2017.06.29 |