/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    

    ListNode* oddEvenList(ListNode* head) {
        // write code here\

        //感觉还是双指针问题,基偶2指针
        if(!head->next||!head){
            return head ;
        }
        ListNode * p1 = head ;
        ListNode * p2 = head -> next ;
        ListNode * p2head = p2;
        while (p2 && p2->next) {
            p1->next = p1->next->next; // 奇数节点指向下一个奇数节点
            p2->next = p2->next->next; // 偶数节点指向下一个偶数节点
            p1 = p1->next;             // 移动奇数节点指针
            p2 = p2->next;             // 移动偶数节点指针
        }

        // 将奇数链表的末尾连接到偶数链表的头部
        p1->next = p2head;
        
        return head ;
    }
};

双指针