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存储起来,最后分别组装奇数位和偶数位结点链表形成新链表。