原题链接:Odd Even Linked List
题意理解:这道题是难得的几道题意比较绕的题,如果没有看清题意会把它当做难题来做(我起初就是这样)。仔细看看才发现原来酱紫。
题意是这样的:奇 偶 奇 偶 奇 偶 奇 偶…..序列
要求将奇数节点inplace移到前面。其实很简单:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* oddEvenList(ListNode* head) {
/*
分析:题意限制比较多,但是给的条件也很好解决这个问题;
思路:用一个奇数指针和偶数指针分别指向奇偶节点,利用本题特有的特性,遍历完成就已经归序了,最后将偶节点连在奇数节点之后即可
Time Complexity:O(N)
Space Complexity:O(1)
*/
if(!head || !head->next)return head;
ListNode* odd=head;
ListNode* even=head->next;
ListNode* evenHead=even;
while(even && even->next){
odd->next=odd->next->next;
even->next=even->next->next;
odd=odd->next;
even=even->next;
}
odd->next=evenHead;
return head;
}
};