奇数在前偶数在后。各自反转后相连

Posted 随风

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了奇数在前偶数在后。各自反转后相连相关的知识,希望对你有一定的参考价值。

#include <iostream>
#include <stdlib.h>
using namespace std;

struct node {
    struct node *next;
    int value;
};
node *CreateListNode(int value)
{
    if(value==NULL)
        return NULL;
    node *pNode=(node*)malloc(sizeof(node));
    pNode->value=value;
    pNode->next=NULL;
    return pNode;
}
void ConnectNodes(node*pCurrent,node* pNext)
{
    if (pCurrent==NULL)
    {
        cout<<"Error to connect two nodes."<<endl;
        exit(1);
    }
    pCurrent->next=pNext;
}
void PrintList(node* pHead)
{
    node *pNode=pHead;
    while (pNode!=NULL)
    {
        cout<<pNode->value<<" ";
        pNode=pNode->next;
    }
    cout<<endl;
}
struct node *reverse(struct node *list)
{
    if (list==NULL)
        return NULL;
    if(list->next==NULL)
        return list;
    node* tPre=list;
    node* tmp=list->next;
    while (tmp)
    {
        node* tNext=tmp->next;
        tmp->next=tPre;
        tPre=tmp;
        tmp=tNext;
    }
    list->next=NULL;
    list=tPre;
    return list;
}
struct node *swap(struct node *list)
{
    if (list==NULL)
        return NULL;
    if (list->next==NULL)
        return list;
    node *p=list;
    node *OddHead=(node*)malloc(sizeof(node));
    node *EvenHead=(node*)malloc(sizeof(node));
    node *Odd=OddHead;
    node *Even=EvenHead;
    while (p)
    {
        if (p->value%2==0)
        {
            Even->next=p;
            Even=p;
        }
        else
        {
            Odd->next=p;
            Odd=p;
        }
        p=p->next;
    }
    Even->next=NULL;
    Odd->next=NULL;

    Even=reverse(EvenHead->next);
    Odd=reverse(OddHead->next);
    OddHead=Odd;
    while (Odd->next)
        Odd=Odd->next;

    Odd->next=Even;
    return OddHead;
    //return OddHead;
}

int main()
{
    node *pNode1=CreateListNode(4);
    node *pNode2=CreateListNode(5);
    node *pNode3=CreateListNode(7);
    node *pNode4=CreateListNode(1);
    node *pNode5=CreateListNode(6);

    ConnectNodes(pNode1,pNode2);
    ConnectNodes(pNode2,pNode3);
    ConnectNodes(pNode3,pNode4);
    ConnectNodes(pNode4,pNode5);

    node* p=swap(pNode1);
    PrintList(p);
    return 0;
}

 

以上是关于奇数在前偶数在后。各自反转后相连的主要内容,如果未能解决你的问题,请参考以下文章

调整该数组中数字的顺序,奇数在前,偶数在后

算法题:奇数在前 偶数在后,相对顺序保持不变

js排序 奇数在前,偶数在后,升序排序

c语言分段排序 整型数组,偶数在前,奇数在后,从小到大

算法 调整数组顺序,使得奇数在前偶数在后,分别保证奇数和偶数之间的相对位置不变

c语言中 排列偶数与奇数,奇数在后,偶数在前