为什么我编写的C语言程序没有错误却不能运行出结果

我的程序如下:
//编程思想:先建立一个空链表,定义链表长度为五,再建立两个链表,//

//当输入的数为奇数时,插入到链表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);

}

逻辑有错这最难道找了
温馨提示:答案为网友推荐,仅供参考
相似回答