๐Ÿ“šSTUDY/๐Ÿ‘€ coding test๋Œ€๋น„

[LeetCode] 328. Odd Even Linked List

ํ•ด๋Š”์„  2022. 1. 15. 13:44

linked list๊ฐ€ ๋“ค์–ด์™”์„ ๋•Œ, ํ™€์ˆ˜๋ฒˆ์งธ ๋…ธ๋“œ์™€ ์ง์ˆ˜๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋”ฐ๋กœ ๋ชจ์œผ๊ณ , ํ™€์ˆ˜๋ฒˆ์งธ ๋…ธ๋“œ ๋ฆฌ์ŠคํŠธ -> ์ง์ˆ˜๋ฒˆ์งธ ๋…ธ๋“œ ๋ฆฌ์ŠคํŠธ๋กœ ์ถœ๋ ฅํ•˜๋ผ๋Š” ๋ฌธ์ œ๋‹ค.

 

๋จผ์ € ์˜ˆ์™ธ์‚ฌํ•ญ์„ ์ฒดํฌํ•ด์ฃผ๊ณ , ๊ทธ ๋’ค flag๋ฅผ ๋‘ฌ์„œ ์ง์ˆ˜๋ฒˆ์งธ์ธ์ง€ ํ™€์ˆ˜๋ฒˆ์งธ์ธ์ง€ ๊ตฌ๋ถ„ํ•˜๋ฉด์„œ ๊ฐ๊ฐ์˜ linked list์— ์—ฐ๊ฒฐํ•ด์ฃผ๊ณ , ๋งˆ์ง€๋ง‰์— ํ™€์ˆ˜ ๋ฆฌ์ŠคํŠธ์˜ next๋ฅผ ์ง์ˆ˜ ๋ฆฌ์ŠคํŠธ์˜ head๋กœ ์—ฐ๊ฒฐํ•ด์ฃผ์—ˆ๋‹ค. 

 

/**
 * 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) {
        
        if (head == NULL) return NULL;
        else if (head->next == NULL) return head;
        
        ListNode* oddhead = head;
        ListNode* evenhead = head->next;
        

        
        ListNode* odd = oddhead;
        ListNode* even = evenhead;
        
        head = head->next->next;

        oddhead->next = NULL;
        evenhead->next = NULL;

        
        int flag = 1;
        
        while (head!= NULL){
            
            if (flag == 1){
                odd->next = head;
                odd = odd->next;
                head = head->next;
                odd->next = NULL;
                flag = 0;
            }
            else{
                even->next = head;
                even = even->next;
                head = head->next;
                even->next = NULL;
                flag = 1;
            }
            
            
        }
        
        
        odd->next = evenhead;
          
        return oddhead;
    }
};