/**
* 给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。
*
* 第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。
*
* 请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。
*
* 你必须在 O(1) 的额外空间复杂度和 O(n) 的时间复杂度下解决这个问题。
*
* 来源:力扣(LeetCode)
* 链接:https://leetcode.cn/problems/odd-even-linked-list
* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
*/
public class OddEvenList {
/**
* 题解:
* 1. 获取奇数链表的首个节点odd
* 2. 获取偶数链表的首个节点even
* 3. 还需要有一个evenHeaad始终指定偶数链表的第一个节点
* 4. 判断当前evene节点以及其后的节点是否为null
* 4.1 如果均不为空的话,代表odd和even后面都需要增加一个节点
* 4.2 odd节点后新增节点为even.next,并后移一个节点
* 4.3 even节点后新增一个节点,为odd.next(是不是null都无所谓,下一个while循环会进行判断),并且even需指向下一个奇数节点,及odd.next
* 5. 直至even ==null || even.next == null 退出while循环
* 6. 将odd.next = evenHead
* 7. renturn head.
* @param head
* @return
*/
public ListNode oddEvenList(ListNode head) {
if (head == null) {
return null
}
ListNode evenHead = head.next
ListNode odd = head
ListNode even = evenHead
while (even != null && even.next != null) {
odd.next = even.next
odd = odd.next
even.next = odd.next
even = even.next
}
odd.next = evenHead
return head
}
private class ListNode {
ListNode next
}
}