题解 | #链表的奇偶重排#
链表的奇偶重排
http://www.nowcoder.com/practice/02bf49ea45cd486daa031614f9bd6fc3
奇数位,不是节点数值的奇偶性,第一遍弄错了
最简单的方式就是使用两个队列,一个放奇数位的一个放偶数位的,但是按照题目的要求,不是按照奇偶数值来进行分类的话,那么就没必要使用队列了,因为位置都是固定的
/**
* 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
queue<ListNode*> odd, even;
ListNode* cur = head;
int idx = 0;
while(cur){
if((idx & 1) == 0){
even.push(cur);
}else odd.push(cur);
cur = cur->next;
idx++;
}
if(odd.empty() || even.empty()) return head;
ListNode*odd_cur = new ListNode(0), *even_cur = new ListNode(0);
ListNode* odd_head = odd.front();
while(!odd.empty()){
ListNode* tmp = odd.front();
odd_cur->next = tmp;
odd_cur = odd_cur->next;
odd.pop();
}
ListNode* enev_head = even.front();
while(!even.empty()){
ListNode* tmp = even.front();
even_cur->next = tmp;
even_cur = even_cur->next;
even.pop();
}
odd_cur->next = nullptr;
even_cur->next = odd_head;
return enev_head;
}
};