使用了双指针

  • 设置first指针和last分别位于前后相邻的位置,一次向后遍历里两步,则得到的frst过的为偶数位,last奇数位
  • 同时考虑null指针的情况
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(head == null) return null;
        
        ListNode fast = head.next;
        ListNode last = head;
        ListNode result1 = last;
        ListNode result2 = fast;
        
        if(fast == null) return head;
       
        
        while(fast.next != null && fast.next.next != null){
            last.next = last.next.next;
            last = last.next;
            fast.next = fast.next.next;
            fast = fast.next;
        }
        if(fast.next == null){
            last.next = result2;
        }else{
            last.next = last.next.next;
            last = last.next;
            fast.next = null;
            last.next = result2;
            
        }
        return result1;
        
        
        
    }
}