BM14-链表的奇偶重排

给定一个单链表,请设定一个函数,将链表的奇数位节点和偶数位节点分别放在一起,重排后输出。
注意是节点的编号而非节点的数值。

数据范围:节点数量满足 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; 
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容