我的程序如下:
//编程思想:先建立一个空链表,定义链表长度为五,再建立两个链表,//
//当输入的数为奇数时,插入到链表L1中,否则插入链表L2中//
//把链表二就地逆置//
//把链表L1的尾结点和链表L2头结点相连//
#include<stdio.h>
#include<malloc.h>
#include<conio.h>
typedef int ElemType;
typedef struct Listnode{
ElemType
data;
struct
Listnode *Prev;
struct Listnode
*next;
}Listnode,*LinkList; //双向循环链表定义//
main()
{ LinkList
L,L1,L2;
Listnode
*p,*q,*k,*r;
int i,x;
L=((Listnode
*) malloc (sizeof(Listnode)));
L->next=NULL;
p=L;
printf("请输入一串数字:\n");
for(i=1;i<=5;i++) //定义一个可以放入五个数字的链表//
scanf("%d",&x);
L1=((Listnode *) malloc (sizeof(Listnode)));
L1->next=NULL;
q=L1;
L2=((Listnode *) malloc (sizeof(Listnode)));
L2->next=NULL;
r=L2;
q=((Listnode *) malloc (sizeof(Listnode)));
r=((Listnode *) malloc (sizeof(Listnode)));
while(p!=NULL)
{
if(p->data%2==1) //判断如果是奇数,放入链表L1,否则放入链表L2//
{
p->next=q->next;
q->next=p;}
else
{
p->next=r->next;
r->next=p;
while(q!=NULL)
{k=r;r-r->next;
k->next=L2->next;
L2->next=k;}
} //把L2链表逆置//
}
if (q->next==NULL)
{
r=L2->next;
q->next=r;
}
//合并两个链表//
printf("操作后输出:\n");
p=L->next;
while(p!=NULL)
printf("%d",p->data);
}