on
[C++] [LeetCode 206] Reverse Linked List
[C++] [LeetCode 206] Reverse Linked List
728x90
문제 풀기 전 생각 :
/* 링크드 리스트 iterator 를 사용한 반복문으로 현재 노드의 다음 노드의 포인터를 저장하고 현재 노드의 연결고리를 끊고 전 노드와 연결 그리고 전 노드를 현재 노드로 변경 작업을 모든 노드를 거칠 때까지 반복 */
class Solution { public: ListNode* reverseList(ListNode* head) { ListNode* pre=head, *prepre= NULL; if(head == NULL) return head; for(ListNode* ln = head->next ; ln != NULL ; ln = ln->next){ pre->next = prepre; prepre = pre; pre = ln; } pre->next = prepre; return pre; } };
https://leetcode.com/problems/reverse-linked-list/
풀 때 어려웠던 점 또는 느낀점 :
링크드 리스트의 연결을 뒤집는 작업이
오랜만이라 잠시 멍 했던거 같다
그래도 문제가 뚫어져라 쳐다보니
이해가 되서 풀 수 있었다
개선방안 :
class Solution { public: // Method 1: Iterative /* ListNode* reverseList(ListNode* head) { if (head==nullptr) return head; ListNode *prev=nullptr, *next=nullptr; while (head!=nullptr){ next = head->next; head->next = prev; prev = head; head = next; } return prev; } */ // Method 2: Recursive ListNode* reverseList(ListNode* head) { if (head==nullptr || head->next==nullptr) return head; ListNode *p = reverseList(head->next); head->next->next = head; head->next = nullptr; return p; } };
오호 재귀함수로 푼 버전도 흥미롭다
코드가 직관적이라 이해하기 편한것 같다
from http://365waytobe-pro-grammer.tistory.com/75 by ccl(A) rewrite - 2021-08-09 17:26:17