class Solution { public: ListNode* oddEvenList(ListNode* head) { //如果链表为空,不用重排 if(head == NULL) return head; //even开头指向第二个节点,可能为空 ListNode* even = head->next; //odd开头指向第一个节点 ListNode* odd = head; //指向even开头 ListNode* evenhead = even; while(even != NULL && even->next != NULL){ //odd连接even的后一个,即奇数位 odd->next = even->next; //odd进入后一个奇数位 odd = odd->next; //even连接后一个奇数的后一位,即偶数位 even->next = odd->next; //even进入后一个偶数位 even = even->next; } //even整体接在odd后面 odd->next = evenhead; return head; } }; // /** // * struct ListNode { // * int val; // * struct ListNode *next; // * ListNode(int x) : val(x), next(nullptr) {} // * }; // */ // #include <vector> // class Solution { // public: // /** // * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 // * // * // * @param head ListNode类 // * @return ListNode类 // */ // ListNode* oddEvenList(ListNode* head) { // // write code here // // 利用数组吧,可以用两个数组分别存放奇数位和偶数位元素; // // 也可以稍加优化,直接用一个数组存放偶数位; // vector<int> even_num; // ListNode* ans = new ListNode(-1); // ListNode* temp = ans; // int i=1; // while(head) // { // // 奇数位 // if(i%2) // { // ListNode* num = new ListNode(head->val); // temp->next = num; // temp = temp->next; // } // else // { // even_num.emplace_back(head->val); // } // ++i; // head = head->next; // } // for(auto i: even_num) // { // ListNode* num = new ListNode(i); // temp->next = num; // temp = temp->next; // } // return ans->next; // } // };