涉及到奇偶问题,由于链表自身的特性,不能分别并行处理奇偶位置,会出现version1的错误

应该交替串行对奇偶位置进行流式处理,详见version2

version1

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    ListNode* oddEvenList(ListNode* head) {
        // write code here
        ListNode* dummy = new ListNode(0);
        dummy->next = head;
        ListNode* cur = dummy;
        ListNode* odd = head;
        ListNode* even = head->next;
        
        // 接入奇数
        while(odd && odd->next){
            cur->next = odd;
            cur = cur->next;
            odd = odd->next->next;
        }
        
        // 接入偶数
        while(even && even->next){
            cur->next = even;
            cur = cur->next;
            // 这步是有问题的:even->next是奇数,它已经被指向到了下一个奇数,所以even->next->next无法得到下一个偶数
            even = even->next->next;
        }
        
        return head;
    }
};

version2


class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    ListNode* oddEvenList(ListNode* head) {
        // write code here
        
        if(!head)
            return head;
        
        ListNode* odd = head;
        ListNode* even = head->next;
        ListNode* evenHead = even;
        
        while(even && even->next){
            // extend odd
            odd->next = even->next;
            
            odd = odd->next;
            
            // extend even
            even->next = odd->next;
            
            even = even->next;
        }
        odd->next = evenHead;
        
        return head;
    }
};