题解 | #链表的奇偶重排#

链表的奇偶重排

https://www.nowcoder.com/practice/02bf49ea45cd486daa031614f9bd6fc3

C语言

//创建奇偶两条链表的虚拟头节点,根据当前节点的奇偶来放到对应奇偶链表中,当放完后,再将偶链表的放到奇链表后,输出

struct ListNode* oddEvenList(struct ListNode* head ) {

    // write code here

    struct ListNode* dummyHeadOdd  = (struct ListNode*)malloc(sizeof(struct ListNode));  //奇数虚拟头节点

    struct ListNode* dummyHeadEven = (struct ListNode*)malloc(sizeof(struct ListNode)); //偶数虚拟头节点

    struct ListNode *tmp, *tmpOdd, *tmpEven;

    tmp = head, tmpOdd = dummyHeadOdd, tmpEven = dummyHeadEven; //设置head和奇偶链表的当前位置指针

    int count = 0;

    while(tmp){

        count++;

        if(count%2){        //奇数,将head当前节点放到奇链表中

            tmpOdd->next = tmp;

            tmpOdd = tmpOdd->next;

        }else{              //偶数,将head当前节点放到偶链表中

            tmpEven->next = tmp;

            tmpEven = tmpEven->next;

        }

        tmp = tmp->next;

    }

    tmpEven->next = NULL;   //退出循环后,设置偶链表的下一位为空,防止嵌套

    tmpOdd->next = dummyHeadEven->next; //将偶链表的放到奇链表后

    return dummyHeadOdd->next;  

}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务