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
if (null == head) {
return null;
}
Map<String, List<Integer>> map = new HashMap<String, List<Integer>>();
ListNode cur = head;
int index = 0;
while (cur != null) {
index++;
if (index % 2 == 0) {
// 偶数位结点
if (map.containsKey("even")) {
List<Integer> evenList = map.get("even");
evenList.add(cur.val);
map.put("even", evenList);
} else {
List<Integer> evenList = new ArrayList<>();
evenList.add(cur.val);
map.put("even", evenList);
}
} else {
// 奇数位结点
if (map.containsKey("odd")) {
List<Integer> oddList = map.get("odd");
oddList.add(cur.val);
map.put("odd", oddList);
} else {
List<Integer> oddList = new ArrayList<>();
oddList.add(cur.val);
map.put("odd", oddList);
}
}
cur = cur.next;
}
ListNode oddHead = null;
ListNode odd = null;
ListNode evenHead = null;
ListNode even = null;
for (Map.Entry<String, List<Integer>> entry : map.entrySet()) {
String key = entry.getKey();
List<Integer> value = entry.getValue();
if ("odd".equals(key)) {
for (int i = 0; i < value.size(); i++) {
ListNode node = new ListNode(value.get(i));
if (0 == i) {
oddHead = node;
odd = node;
} else {
odd.next = node;
odd = node;
}
}
} else {
for (int i = 0; i < value.size(); i++) {
ListNode node = new ListNode(value.get(i));
if (0 == i) {
evenHead = node;
even = node;
} else {
even.next = node;
even = node;
}
}
}
}
odd.next = evenHead;
return oddHead;
}
}
将奇数位和偶数位的结点有list存储起来,最后分别组装奇数位和偶数位结点链表形成新链表。



京公网安备 11010502036488号