チェーンテーブルのすべての要素が奇数のノードを要素が偶数のノードの前に移動し、奇数の間の順序が変わらず、偶数の間の順序が変わらないことを保証します(革新的な工場)
チェーンテーブルのすべての要素が奇数のノードを要素が偶数のノードの前に移動し、奇数の間の順序が変わらず、偶数の間の順序が変わらないことを保証します(革新工場筆記試験)
例:
交換前チェーンテーブルの順序交換後チェーンテーブルの順序
4→5→3→1→2 ==> 5→3→1→4→2
1=>1(チェーンテーブルには1つの要素のみ)
2→1 ==>1→2
==>(チェーンテーブルが空)
C/C++:
チェーンテーブルノードは次のように定義されます.
struct node {
struct node *next;
int value;
};
struct node *swap(struct node *list);
注意点と要件は次のとおりです.
1.swap関数では、ノードのポインタ/参照を操作する必要があります(新しいチェーンテーブルノードは作成できません).
2.ライブラリ関数/APIは使用できません.類似の機能を使用する場合は、ご自身で実装してください.
3.チェーンテーブルを他のタイプのデータ構造に変換して交換してはならない.例えば配列など
例:
交換前チェーンテーブルの順序交換後チェーンテーブルの順序
4→5→3→1→2 ==> 5→3→1→4→2
1=>1(チェーンテーブルには1つの要素のみ)
2→1 ==>1→2
==>(チェーンテーブルが空)
C/C++:
チェーンテーブルノードは次のように定義されます.
struct node {
struct node *next;
int value;
};
struct node *swap(struct node *list);
注意点と要件は次のとおりです.
1.swap関数では、ノードのポインタ/参照を操作する必要があります(新しいチェーンテーブルノードは作成できません).
2.ライブラリ関数/APIは使用できません.類似の機能を使用する場合は、ご自身で実装してください.
3.チェーンテーブルを他のタイプのデータ構造に変換して交換してはならない.例えば配列など
#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)// 2
{
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 *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==1)//
{
Even->next=p;
Even=p;
}
else
{
Odd->next=p;
Odd=p;
}
p=p->next;
}
Odd->next=NULL;// .
Even->next=OddHead->next;// .
return EvenHead->next;//
}
int main()
{
// .
node *pNode1=CreateListNode(4);
node *pNode2=CreateListNode(5);
node *pNode3=CreateListNode(3);
node *pNode4=CreateListNode(1);
node *pNode5=CreateListNode(2);
// .
ConnectNodes(pNode1,pNode2);
ConnectNodes(pNode2,pNode3);
ConnectNodes(pNode3,pNode4);
ConnectNodes(pNode4,pNode5);
node *p=swap(pNode);
PrintList(p);
}