给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。
请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。
思路:规定head为奇链表的头结点,o为奇链表的尾节点;p为偶链表的头结点,e为偶链表的尾节点
ListNode* oddEvenList(ListNode* head) {
if(head==NULL || head->next==NULL)
{
return head;
}
ListNode* o = head;//head为奇链表的头结点,o为奇链表的尾结点
ListNode* p = head->next;//p为偶链表的头结点,
ListNode* e = p;//e为偶链表的尾节点
while(o->next != NULL && e->next != NULL)
{
o->next = e->next;
o = o->next;
e->next = o->next;
e = e->next;
}
o->next = p;
return head;
}