给定一个单链表,将所有奇数节点组合在一起,然后是偶数节点。请注意,这里我们谈论的是节点号,而不是节点中的值。
您应该尝试就地进行。该程序应在O(1)空间复杂度和O(节点)时间复杂度下运行。
范例1:
输入:1->2->3->4->5->NULL
输出:1->3->5->2->4->NULL
方法就是循环,然后将偶放在奇后,特别要先将偶的头先保存。以当前even是否为空,和下一个odd是否为空 条件与作为循环终止条件。
code:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* oddEvenList(ListNode* head) {
if(head!=nullptr) {
ListNode* odd=head,*even=head->next,*evenhead=even;
while(even!=nullptr&& even->next!=nullptr ){ //这种方式:奇数一定不可能结尾
odd->next=odd->next->next;
even->next=even->next->next;
odd=odd->next;
even=even->next; //even的next是odd下一个,next*2 就是下一个evne
}
odd->next=evenhead;
}
return head;
}
};