真的很懵,我的这串代码最终没有输出结果。
在写一道题目,先按照要求生成链表,然后将生成的带有头结点的单向链表的前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。
求指点!!我真的不知道问题出在哪里!