求帮助:我找不到我这串代码的bug

真的很懵,我的这串代码最终没有输出结果。
在写一道题目,先按照要求生成链表,然后将生成的带有头结点的单向链表的前m个节点移到链尾。结果写了半天,发现最后不输出。
#include   
#include   
typedef struct numLink  
{  
    int no;  
    struct numLink *next;  
}NODE;  
  
NODE *monenode( NODE *head, int m );  
  
void SetLink( NODE *h, int n )  
{  
    NODE *p=NULL, *q=NULL;  
    int i;  
    for( i=0; ino = i+1;  
        p->next = NULL;  
        if( h->next == NULL )  
        {  
            h->next = p;  
            q = p;  
        }  
        else  
        {  
            q->next = p;  
            q = q->next;  
        }  
    }  
    return;  
}  //用于生成链表的函数 
  
int main( )  
{  
    int n,m;  
    NODE *head=NULL, *q=NULL;  
    scanf("%d%d",&n,&m);  
    head = (NODE *)malloc(sizeof(NODE));  
    head->no = -1;  
    head->next = NULL;  //建立头节点,数值域存储-1 
  
    SetLink( head, n );//生成链表,数值从“1”到“n” 
  
    q = monenode( head, m );  //数值移动 
  
    do  
    {  
        printf("%d ",q->next->no);  
        q = q->next;  
    }while( q->next != NULL );   
    printf("\n");  //输出移动后的链表 
    return 0;  
}  
NODE *monenode( NODE *head, int m )
{
    int i,t;
    NODE *k,*j;
    
    for(i=1;i<=m;i++)
    {
        k=head->next;
        t=k->no;
        while(k!=NULL)
        {
            j=k->next;
            k->no=j->no;
            k=j; 
        }
        k->no=t;
    }
    return head;
}//用于数值移动的函数

然后非常神奇的事情发生了!!这个程序!没有!输出结果!
可以看到,我没有想着移动整个节点,而是直接移动数值域的数据。无论如何改动测试数据都没有用,只能是我的代码有问题。但是我无论如何都找不到bug。
求指点!!我真的不知道问题出在哪里!