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

#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;
}
时间: 2024-08-02 09:00:15

奇数在前偶数在后。各自反转后相连的相关文章

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

题目:输入一个整形数组,将数组重新排序,使得所有奇数在前偶数在后,并使奇数之间和偶数之间的相对位置爆出不变. 思想:从数组开头开始遍历所有数组.当碰到偶数时,将偶数打包,即记录到目前为止偶数的个数,把这些偶数看成一个整体:当碰到奇数时,将这个奇数与前面的偶数整体对调位置. #include <stdio.h> #include <stdlib.h> void nuo(int *a,int j,int nu)                     //将奇数与前面所有偶数调换位置

使用TreeSet和Comparator,写TreeSetTest2 要求:对TreeSet中的元素1,2,3,4,5,6,7,8,9,10进行排列,排序逻辑为奇数在前偶数在后,奇数按照升序排列,偶数按照降序排列

/* * 使用TreeSet和Comparator,写TreeSetTest2 *要求:对TreeSet中的元素1,2,3,4,5,6,7,8,9,10进行排列, *排序逻辑为奇数在前偶数在后,奇数按照升序排列,偶数按照降序排列 */ import java.util.Comparator; import java.util.TreeSet; public class TreeTest2 { public static void main(String[] args) { // TODO Aut

数组中,奇数放前偶数放后

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 错误代码: public class Solution { public void reOrderArray(int [] array) { int len=array.length; for(int i=0;i<len;i++){ if((array[i]&1)==0){ int j; for(j=i;j<

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

面试遇到了这样一个问题,由于自己对sort还不是特别了解,又是笔试,无法在线调试.回家后了解了一下,竟然5分钟就写出来了. <!DOCTYPE html><html><head><meta charset="utf-8"><title></title></head><body><script>var arr = [1,4,2,8,3,5,10,9,7,6,41,58]; // 排

24、输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变.  思路:新建一个数组先把原数组中的奇数push进去再把偶数push进去,然后用新数组数据覆盖原数组即可 复杂度O(n),用空间换时间 class Solution { public:     void reOrderArray(vector<int> &array) {         vector<int&

c语言代码编程题汇总:升序,奇数在前,偶数在后

升序,奇数在前,偶数在后 自己的代码: 1 /* 2 2017年3月14日12:52:39 3 功能:升序,奇数在前,偶数在后 4 */ 5 #include "stdio.h" 6 int main () 7 { 8 int j = 0, k = 0; 9 int a[10]; 10 int b[10]; 11 int c[10]; 12 int *pa = a; 13 14 printf("please input 10 number: \n"); 15 for

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

题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. class Solution { public: void reOrderArray(vector<int> &array) { vector<int> a,b; for(int i=0;i<array.size();i++) { if(array[i]%2==1) a.push_bac

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

如果不考虑奇数和奇数,偶数和偶数之间的相对位置不变.那么只需要两个指针分别指向数组的头和尾,依次比较. 1. 如果头指针指向的数组位置为奇数,那么就判断尾指针指向的数组位置的奇偶性.如果是奇数,则头指针后移一个位置,如果是偶数,则尾指针前移一个位置. 2. 如果头指针指向的数组位置为偶数,那么就判断尾指针指向的数组位置的奇偶性.如果是奇数,则交换头尾指针指向的数组元素,如果是偶数,则尾指针前移一个位置. 代码如下: public class Q13_ReOrderArray { public s

用C语言编程,实现调整数组,使奇数全部位于偶数前边,

函数要求实现功能:调整数组使奇数全部都位于偶数前面. 要求: 输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分. 思考,要想实现此功能,首先对函数数组进行遍历,从两头进行,一个从前向后查看数组元素是否为奇数,一个从后向前查看数组元素是否为偶数,如果前为偶,后为奇则进行调换! 程序如下: /* **2.调整数组使奇数全部都位于偶数前面. ** 题目: **输入一个整数数组,实现一个函数, **来调整该数组中数字的顺序使得数组