将链表中值为奇数的结点放到值为偶数的结点之前
例如 :3->2->5->8->4->7->6->9->0->1
经过处理变为:1->9->7->5->3->2->8->4->6->0
代码如下:
/*
要求将链表中值为奇数的结点放到值为偶数结点之前
*/
#include<stdio.h>
#include<stdlib.h>
#define N 10
//定义结构体单元
typedef struct node{
int data;//结构体数据域
struct node* next;//结构体指针域
}ElemSN;
//逆向创建单向链表(头插法)
ElemSN *PreCreatLink(int a[],int n)
{
ElemSN *head=NULL,*p;
for(int i=n-1;i>-1;i--)
{
p=(ElemSN*)malloc(sizeof(ElemSN));
p->data=a[i];
p->next=head;
head=p;
}
return head;
}
ElemSN* PreLink(ElemSN *head)
{
ElemSN *p,*q;
q=head;
p=head->next;
while(p)
{
if(p->data%2)
{
q->next=p->next;
p->next=head;
head=p;
p=q->next;
}
else
{
q=p;
p=p->next;
}
}
return head;
}
//打印链表所有结点的值
void PrintLink(ElemSN* head)
{
ElemSN *p=head;
for(;p;p=p->next)
printf("%5d",p->data);
}
int main(void)
{
ElemSN *head;
int a[N]={3,2,5,8,4,7,6,9,0,1};
head=PreCreatLink(a,N); //头插法创建链表
PrintLink(head); //打印链表结点的值
printf("\n");
head=PreLink(head); //将链表中值为奇数的结点放到值为偶数结点之前
PrintLink(head); //打印链表结点的值
}
运行结果如下: