给定一个单链表,请设定一个函数,将链表的奇数位节点和偶数位节点分别放在一起,重排后输出。
注意是节点的编号而非节点的数值。
数据范围:节点数量满足 0≤n≤10^5
节点中的值都满足 0≤val≤1000
要求:空间复杂度 O(n),时间复杂度 O(n)
示例1
输入:{1,2,3,4,5,6}
返回值:{1,3,5,2,4,6}
说明:1->2->3->4->5->6->NULL
重排后为: 1->3->5->2->4->6->NULL
# 示例2
输入:{1,4,6,3,7}
返回值:{1,6,7,4,3}
说明: 1->4->6->3->7->NULL
重排后为: 1->6->7->4->3->NULL
奇数位节点有1,6,7,偶数位节点有4,3。重排后为1,6,7,4,3
备注:
链表长度不大于200000。每个数范围均在int内。
/* struct ListNode {
* int val;
* struct ListNode *next;
* };
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @return ListNode类
*/
struct ListNode* oddEvenList(struct ListNode* head ) {
// write code
if(head==NULL || head->next==NULL || head->next->next==NULL)
{
return head;
}
struct ListNode* p0;
struct ListNode* p1;
struct ListNode* p2;
struct ListNode* p3;
struct ListNode* phead;
phead = head->next;
p2 = head;
p3 = head->next;
while(p3->next!=NULL && p3!=NULL)
{
p0 = p2;
p2 = p3->next;
p1 = p3;
p3 = p2->next;
p0->next = p2;
p2->next = phead;
p1->next = p3;
}
return head;
}