(数据结构)不知道哪里出错了,程序无法执行

void ListOrder_L(LinkList head)
{
	LinkList tp,m;
	ElemType bei;
	tp=head->next;
	m=tp->next;
	while(tp!=NULL) 
	  while(m!=NULL)
	  {
		if(tp->data<m->data)
		{
		bei=tp->data;
		tp->data=m->data;
		m->data=bei;
		m=m->next;
		} 
		else
		{
		m=m->next;
		}
	  }
	  tp=tp->next;
	  m=tp->next;
}

自己写的一个排序函数,给输入的字符进行排序

int main()
{
	int i;
	char cmd,e;
	LinkList head;
	head=(LinkList)malloc(sizeof(LNode));
	head->next=NULL;
	CreateList_L(head);
	ListPint_L(head);
	do
	{printf("i,I...插入\n");
	printf("d,D...删除\n");
	printf("q,Q...退出\n");
	printf("o,O...排序\n");
	do
	  {
	  	fflush(stdin);
	  	scanf("%c",&cmd);
	  }while((cmd!='d')&&(cmd!='D')&&(cmd!='q')&&(cmd!='Q')&&(cmd!='i')&&(cmd!='I')&&(cmd!='o')&&(cmd!='O'));
	  switch(cmd)
	  {
	  	case 'i':
	    case 'I':
	    	printf("请输入你要插入的数据:");
	    	fflush(stdin);
	    	scanf("%c",&e);
	    	printf("请输入你要插入的位置:");
	    	scanf("%d",&i);
	    	ListInsert_L(head,i,e);
	    	ListPint_L(head);
	    	break;
	    	case 'd':
	    	case 'D':
	    		printf("请输入你要删除元素的位置:");
	    		fflush(stdin);
	    		scanf("%d",&i);
	    		ListDel_L(head,i);
	    		ListPint_L(head);
	    		break;
	    		case 'o':
	    		case 'O':
	    			ListOrder_L(head);
	    			break;
	  }
	}while((cmd!='q')&&(cmd!='Q'));
	return 1;
}

这是程序,执行的时候输入O与o就没反应了

可能是死循环或访问到奇怪的地方,建议在循环中加个输出判断


void ListOrder_L(LinkList head)
{
    LinkList tp, m;
    ElemType bei;
    tp = head->next;
    m = tp->next;
    while (tp != NULL)
    {
        while (m != NULL)
        {
            if (tp->data < m->data)
            {
                bei = tp->data;
                tp->data = m->data;
                m->data = bei;
                m = m->next;
            }
            else
            {
                m = m->next;
            }
        }
        tp = tp->next;
        m = tp->next;
    }    
}

你的第一个while死循环了