Leetcode - 143. Reorder List

soopsaram·2022년 10월 4일
0

멘타트 훈련

목록 보기
165/208

문제

[1] [2] [3] ... [n-2] [n-1] [n] 순서의 링크드 리스트가 주어진다.
[1] [n] [2] [n-1] [3] [n-2] ... 순서로 재 정렬하라.

Input: head = [1,2,3,4,5]
Output: [1,5,2,4,3]

해결 stack - O(n) / O(n)

stack에 넣고 pop하면 뒤에서부터 거꾸로 노드를 얻을 수 있다. 원래 리스트와 스택에서 pop한 노드를 순차적으로 합치는 방법.

class Solution {
public:
    void reorderList(ListNode* head) {
        stack<ListNode *> st;
        ListNode *node = head;
        int node_cnt = 0;
        
        for (;node != NULL; node = node->next) {
            st.push(node);
            node_cnt++;
        }
        
        node = head;
        // 1 4 (2) 3 N
        for (int i = node_cnt/2; i > 0; i--) {
            ListNode *temp = st.top();
            st.pop();
            temp->next = node->next;
            node->next = temp;
            node = node->next->next;
        }
        node->next = NULL; // 이부분이 잘 이해가 안감.
    }
};
profile
기록 & 정리 아카이브 용도 (보다 완성된 글은 http://soopsaram.com/documentudy)

0개의 댓글