核心思想
- 链表长度<=2的,直接返回
- 定义初始结点,分别指向第一个奇数结点,和第二个偶数节点
- 循环,判断条件是当前偶数节点是否有下一个奇数结点
- 有奇数结点,则完善奇数链表,也就是摘掉当前的偶数节点,移动奇数链表尾结点
- 完事后,继续判断是否有偶数节点
- 有偶数节点,则完善偶结点链表
- 没有偶数节点,则终结偶数链表,即尾结点next = null
- 奇数尾巴结点追加偶数头指针
- 返回原始头,head
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @return ListNode类
*/
struct ListNode* oddEvenList(struct ListNode* head ) {
// write code here
if(head == NULL || head->next == NULL || head->next->next == NULL)
{
return head;
}
struct ListNode * even = head;
struct ListNode * evenMove = even;
struct ListNode * odd = head->next;
struct ListNode * oddMove = odd;
while(oddMove->next != NULL)
{
evenMove->next = oddMove->next;
evenMove = evenMove->next;
if(evenMove->next == NULL)
{
oddMove->next = NULL;
break;
}
oddMove->next = evenMove->next;
oddMove = oddMove->next;
}
evenMove->next = odd;
return head;
}