有关无终止输出的原因解决方案

有关无终止输出的原因
下面是我写的一个程序,但是输出结果却是无终止输出(答案正确)
想请教大侠们,为啥会出现这样的情况,又该怎样避免。并告诉我我的程序该如何该才能正常输出结果
/*   Note:Your   choice   is   C   IDE   */
#include   <stdio.h>
#include   <malloc.h>
#define   NULL   0

typedef   struct   Listnode
{
int   data;
struct   Listnode   *next;
}List;

/*建立一个单链表,表中元素值递增有序排列*/
struct   Listnode   *creat(void){/*创建一个单链表*/
struct   Listnode   *pCurson,*postion,*head; /*定义head为头指针,pCurson为活动指针,positon为定位指针*/
pCurson=postion=head=(struct   Listnode*)malloc(sizeof(struct   Listnode));/*建立一个节点*/                                                    
printf( "please   put   in   data: ");
scanf( "%d ",&pCurson-> data);
while(pCurson-> data!=NULL)/*如果输入的值非空,则继续输入,直到输入值为空*/
{
pCurson=(struct   Listnode*)malloc(sizeof(struct   Listnode));
printf( "please   put   in   data: ");
scanf( "%d ",&pCurson-> data);
postion-> next=pCurson;/*将pCurson向下移动一位*/
postion=pCurson;/*将postion重新定位到pCurson所指向的地址*/
}
postion-> next=NULL;/*如果输入值为空,则postion所指向的下一个地址为空*/
return(head);/*结束返回头结点*/
}

/*将单链表中大于mink,小于maxk的值删除*/
void   dele(List   *head,int   mink,int   maxk){
List   *pCurson,*postion;
pCurson=postion=head;/*将pCurson和postion指向头指针*/
while(pCurson-> data> =maxk){
        printf( "not   any   data   will   be   deleted!\n ");/*如果单链表中值大于等于maxk,则不删除任何数据*/
        }
while(pCurson-> data <=mink){/*如果单链表中最小值小于等于MINK,则依次向下移动,直到遇到大于mink的值为止*/
postion=pCurson;/*将postion重定位到pCurson所指向的地址*/
pCurson=pCurson-> next;/*将pCurson向下移动一位地址*/
}
if(pCurson-> data> mink){
        while(pCurson-> data <maxk){/*如果存在值大于mink,小于maxk,则删除该值,并释放结点*/
postion-> next=pCurson-> next;
printf( "delete:%d\n ",pCurson-> data);
free(pCurson);
pCurson=postion;
pCurson=pCurson-> next;
        }  
}        
}

/*输出单链表数据*/
void   show(struct   Listnode   *head){
List   *pCurson;
pCurson=head;
do
{
printf( "data=%5d\n ",pCurson-> data);
pCurson=pCurson-> next;
}
while(pCurson-> next!=NULL);
}

void   main(){
List   *pCurson;
int   mink,maxk;

pCurson=creat();
show(pCurson); /*显示单链表*/

printf( "maxk   is   bigger   than   mink\n ");/*开始输出mink,maxk值*/
printf( "please   input   mink!\n ");
printf( "mink= ");
scanf( "%d ",&mink);
printf( "please   input   maxk!\n ");
printf( "maxk= ");
scanf( "%d ",&maxk);
while(mink==maxk){/*如果mink等于maxk的话,报错并重新输入*/
printf( "ERROR! ");
printf( "maxk   is   bigger   than   mink\n ");
printf( "please   input   mink!\n ");
printf( "mink= ");
scanf( "%d ",&mink);
printf( "please   input   maxk!\n ");