[Leetcode] 328. Odd Even Linked List (C++)

마이구미·2021년 12월 2일
0

PS

목록 보기
49/69
post-thumbnail

문제

328. Odd Even Linked List

코드

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* oddEvenList(ListNode* head) {
        ListNode* odd, *even, *temp;
        
        if (head == nullptr) return head;
        odd = head; temp = even = head->next;
        
        while (odd->next and even->next) {
            odd->next = odd->next->next;
            even->next = even->next->next;
            odd = odd->next;
            even = even->next;
        }
        odd->next = temp;
        return head;
    }
};

접근

홀수, 짝수 인덱스의 노드들을 연결시키고 마지막에 홀수 묶음 뒤에 짝수 묶음을 이어야겠다고 생각했다. 이를 위해서 temp 변수를 추가사용하였고 while 문에서 두 칸씩 넘어가면서 연결하였다. 기본적으로 ~->next->next 를 살펴보기 때문에 odd와 even의 next가 모두 존재할 때까지만 반복문을 수행시켰다.

profile
마이구미 마시쪙

0개의 댓글