/**
* 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가 모두 존재할 때까지만 반복문을 수행시켰다.