原题链接
解题思路
第一次题目没看清楚,以为是按值的奇偶来判断,然后导致只过了部分测试案例,后面仔细审题发现是按照位置的奇偶判断。
代码实现不是很难,为了警示自己审题,我还是两个代码都贴出来吧。
解题代码(正解)
public class Solution {
public ListNode oddEvenList(ListNode head) {
if (head != null) {
ListNode odd = head, even = head.next, evenHead = even;
while (even != null && even.next != null) {
odd.next = odd.next.next;
even.next = even.next.next;
odd = odd.next;
even = even.next;
}
odd.next = evenHead;
}
return head;
}}
解题代码(错误理解题意)
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode oddEvenList(ListNode head) {
if(head == null) return null;
ListNode cur = head;
ListNode oddh = null;
ListNode odd = null;
ListNode evenh = null;
ListNode even = null;
while(cur != null) {
ListNode next = cur.next;
if(cur.val % 2 == 0) {
evenh = evenh == null ? cur:evenh;
if(even == null) {
even = evenh;
} else {
even.next = cur;
even = even.next;
}
even.next = null;
}
if(cur.val % 2 != 0) {
oddh = oddh == null ? cur:oddh;
if(odd == null) {
odd = oddh;
} else {
odd.next = cur;
odd = odd.next;
}
odd.next = evenh == null? next:evenh;
}
cur = next;
}
return oddh;
}
}