• Time:O(n)
• Space:O(1)

## C++

``````class Solution {
public:
return;

ListNode* reversed = reverse(mid);
}

private:
ListNode* prev = nullptr;

while (fast && fast->next) {
prev = slow;
slow = slow->next;
fast = fast->next->next;
}
prev->next = nullptr;

return slow;
}

ListNode* prev = nullptr;

while (curr) {
ListNode* next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}

return prev;
}

void merge(ListNode* l1, ListNode* l2) {
while (l2) {
ListNode* next = l1->next;
l1->next = l2;
l1 = l2;
l2 = next;
}
}
};
``````

## JAVA

``````class Solution {
return;

ListNode reversed = reverse(mid);
}

ListNode prev = null;

while (fast != null && fast.next != null) {
prev = slow;
slow = slow.next;
fast = fast.next.next;
}
prev.next = null;

return slow;
}

ListNode prev = null;

while (curr != null) {
ListNode next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}

return prev;
}

private void merge(ListNode l1, ListNode l2) {
while (l2 != null) {
ListNode next = l1.next;
l1.next = l2;
l1 = l2;
l2 = next;
}
}
}
``````

## Python

``````class Solution:
def reorderList(self, head: ListNode) -> None:
prev = None

while fast and fast.next:
prev = slow
slow = slow.next
fast = fast.next.next
prev.next = None

return slow

prev = None

while curr:
next = curr.next
curr.next = prev
prev = curr
curr = next

return prev

def merge(l1: ListNode, l2: ListNode) -> None:
while l2:
next = l1.next
l1.next = l2
l1 = l2
l2 = next