328.Odd Even Linked List
===
###### tags: `Medium`,`Linked List`
[328. Odd Even Linked List](https://leetcode.com/problems/odd-even-linked-list/)
### 題目描述
Given the `head` of a singly linked list, group all the nodes with odd indices together followed by the nodes with even indices, and return the reordered list.
The **first** node is considered **odd**, and the **second** node is **even**, and so on.
Note that the relative order inside both the even and odd groups should remain as it was in the input.
You must solve the problem in $O(1)$ extra space complexity and $O(n)$ time complexity.
### 範例
**Example 1:**
![](https://assets.leetcode.com/uploads/2021/03/10/oddeven-linked-list.jpg)
```
Input: head = [1,2,3,4,5]
Output: [1,3,5,2,4]
```
**Example 2:**
![](https://assets.leetcode.com/uploads/2021/03/10/oddeven2-linked-list.jpg)
```
Input: head = [2,1,3,5,6,4,7]
Output: [2,3,6,7,1,5,4]
```
**Constraints**:
* The number of nodes in the linked list is in the range [0, 10^4^].
* -10^6^ <= `Node.val` <= 10^6^
### 解答
#### Javascript
```javascript=
function oddEvenList(head) {
if (head === null) return null;
let odd = head;
let even = head.next;
const evenHead = even;
while (even && even.next) {
odd.next = even.next;
odd = odd.next;
even.next = odd.next;
even = even.next;
}
odd.next = evenHead;
return head;
}
```
> [name=Marsgoat][time= Dec 6, 2022]
#### Python
```python=
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def oddEvenList(self, head: Optional[ListNode]) -> Optional[ListNode]:
if not head:
return head
odd, even = head, head.next
evenHead = even
while even and even.next:
odd.next = odd.next.next
even.next = even.next.next
odd = odd.next
even = even.next
odd.next = evenHead
return head
```
> [name=Kobe][time= Dec 6, 2022]
#### C#
```csharp=
public class Solution {
public ListNode OddEvenList(ListNode head) {
if (head == null || head.next == null) return head;
ListNode odd = head;
ListNode even = head.next;
ListNode evenHead = even;
while (even != null && even.next != null) {
odd = odd.next = even.next;
even = even.next = even.next.next;
}
odd.next = evenHead;
return head;
}
}
```
> [name=Jim][time= Dec 6, 2022]
### Reference
[回到題目列表](https://hackmd.io/@Marsgoat/leetcode_every_day)