import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @return ListNode类
*/
public ListNode oddEvenList (ListNode head) {
// write code here
// 解题思路:
// 1.如果链表为空或者链表只有一个节点,则返回head
// 2.新建2个链表(n1,n2)分别代表奇/偶
// 3.遍历链表,i从1开始,i%2== 0 则为偶节点 加到n2的后面,否则为奇数节点加到n1的后面
// 4.注意:如果链表节点数是偶数,则2个节点都可以遍历到最后
// 如果是奇数个数,则偶数节点的最后一个节点需要清空
if (head == null || head.next == null) {
return head;
}
int i = 1;
ListNode n1 = new ListNode(-1);
ListNode c1 = n1;
ListNode n2 = new ListNode(-1);
ListNode c2 = n2;
while (head != null) {
if (i % 2 == 0) {
c2.next = head;
c2 = c2.next;
} else {
c1.next = head;
c1 = c1.next;
}
i++;
head = head.next;
}
if (i % 2 == 0) {
c2.next = null;
}
c1.next = n2.next;
return n1.next;
}
}