涉及到奇偶问题,由于链表自身的特性,不能分别并行处理奇偶位置,会出现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;
}
};

京公网安备 11010502036488号