LeetCode Solutions
328. Odd Even Linked List
Time: $O(n)$ Space: $O(1)$
class Solution {
public:
ListNode* oddEvenList(ListNode* head) {
ListNode oddHead(0);
ListNode evenHead(0);
ListNode* odd = &oddHead;
ListNode* even = &evenHead;
for (int isOdd = 0; head; head = head->next)
if (isOdd ^= 1) {
odd->next = head;
odd = odd->next;
} else {
even->next = head;
even = even->next;
}
odd->next = evenHead.next;
even->next = nullptr;
return oddHead.next;
}
};
class Solution {
public ListNode oddEvenList(ListNode head) {
ListNode oddHead = new ListNode(0);
ListNode evenHead = new ListNode(0);
ListNode odd = oddHead;
ListNode even = evenHead;
for (boolean isOdd = true; head != null; head = head.next, isOdd = !isOdd)
if (isOdd) {
odd.next = head;
odd = odd.next;
} else {
even.next = head;
even = even.next;
}
odd.next = evenHead.next;
even.next = null;
return oddHead.next;
}
}
class Solution:
def oddEvenList(self, head: ListNode) -> ListNode:
oddHead = ListNode(0)
evenHead = ListNode(0)
odd = oddHead
even = evenHead
isOdd = True
while head:
if isOdd:
odd.next = head
odd = head
else:
even.next = head
even = head
head = head.next
isOdd = not isOdd
even.next = None
odd.next = evenHead.next
return oddHead.next