#include
#include
typedef int DataType; //定义单链表的数据类型为整型
struct Node {
DataType data; //数据域
struct Node* next; //指针域
};
typedef struct Node *PNode; //定义指向结构体的PNode类型
typedef struct Node *LinkList; //定义链表类型
LinkList CreateList_Tail_loop( )// 尾插法建立单循环链表
{
LinkList head=(LinkList)malloc(sizeof(struct Node));
PNode cur=NULL;
PNode tail=head;
DataType data;
scanf("%d",&data);
while(data != -1)
{ //分配空间,赋值
cur=(struct Node*)malloc(sizeof(struct Node));
cur->data=data;
tail->next=cur;
tail = cur;
scanf("%d",&data);
}
tail->next=head;
return tail;
}
void print(LinkList tail) //输出单链表
{
PNode head=tail->next;
PNode p=head->next;
while(p!=head)
{
printf("%d\n", p->data);
p=p->next;
}
}
void DestoryList_Link(LinkList tail)//释放单链表
{
PNode pre = tail;
PNode p = tail->next;
while (p!=tail)
{
free(p);
p = p->next;
}
free(tail);
}
void Move_Odd_Even(LinkList tail)
{
PNode head=tail->next;
PNode p,q,m;
PNode pre;
p=head->next;
pre=head;
while(p->data%2!=0)
{
pre=p;
p=p->next;
}
m=p;
q=p;
p=p->next;
pre->next=q->next;
tail->next=q;
q->next=head;
tail=q;
while(p!=m)
{
if(p->data%2==0)
{
q=p;
p=p->next;
pre->next=q->next;
tail->next=q;
q->next=head;
tail=q;
continue;
}
pre=p;
p=p->next;
}
}
int main()
{
LinkList tail=NULL;
tail=CreateList_Tail_loop();
Move_Odd_Even(tail);
print(tail);
DestoryList_Link(tail);
return 0;
}