给定一个单链表,使得奇数位置的元素位于偶数位置元素之前。比如说:1->2->4->5->6->NULL,调整以后1->4->6->2->5->NULL。
解析:这道题和上面一道题的区别是:不是把链表中奇数元素位于偶数元素之前,而是奇数位置的元素位于偶数位置元素之前。设置三个指针,指针odd指向奇数位置的元素,指针even指向偶数位置的元素,指针evenHead指向第一个偶数位置的元素,按照奇数位置和偶数位置把链表划分为两部分,然后,奇数链表尾指针指向偶数位置首指针。时间复杂度也是o(n)。ListNode* oddEvenList(ListNode* head)
{
if (head == NULL || head->next == NULL)
return head;
ListNode *odd = head;
ListNode *even = head->next;
ListNode *evenHead = even;
while (even != NULL && even->next != NULL)
{
odd->next = even->next;
odd = odd->next;
even->next = odd->next;
even = even->next;
}
odd->next = evenHead;
return head;
}