请大家帮我调试下这个函数谢谢了啊,找不到错在那里啊。。在线等待谢谢了啊
#include"stdio.h"\\\\\\\\\\\\\\\\\\\\\\\\\\\用单项循环链表实现,N个人1-3报数,报到3次节点删除,求出最后剩下的节点DATE值是什么?
#define NULL 0
#define l 0
#define s struct student
s
{
int date;
s *next;
};
int n;
s *cread()
{
s *q,*p,*head;
n=0;
q=p=head=(s*)malloc(sizeof(s));
scanf("%d",&q->date);
++n;
while(q->date!=NULL)
{
q=(s*)malloc(sizeof(s));
scanf("%d",&q->date);
++n;
if(q->date==NULL)
p->next=head;
else
{p->next=q;
p=q;}
}
return head;\\\\\\\\\\\\\\\\\\\\\\\\\构建单项循环链表
}
int count(s *head)
{
s *q;
int n=1;
q=head->next;
for(;q!=head;q=q->next)
++n;
return n;
}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\计算链表的长度
s *turn(s *head,int n)
{
int m=0,k;
s *q,*p;
p=head;
while(m!=n-1)
{
k=1;
while(k<3)
{
k++;q=p;p=p->next;
if(p==head)
{ q=p;p=p->next;}
}
printf("%d\n",p->date);\\\\\\\\\\\输出删除的节点数
q->next=p->next;
free(p);
p=q;
m++;
printf("\n");
}
return p;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\返回最后剩下的节点地址
}
print(s *head)
{
printf("%d",head->date);
}\\\\\\\\\\\\\\\\\\输出
main()
{
s *head,*p;
int n;
head=cread();
n=count(head);
p=turn(head,n);
print(p);
}
我输入1 2 3 0
第一次删除的数是3没有错,
但是第二次删除的数确实2想不通啊,应该是1啊?
请各位大侠调试下谢谢了啊
[解决办法]
这是谁告诉你注释用\\\\\\\\\\回车用/n??反了!!!
注释用//,回车用\n
#include"stdio.h"///////////////////////////用单项循环链表实现,N个人1-3报数,报到3次节点删除,求出最后剩下的节点DATE值是什么? #include <malloc.h>#define NULL 0 #define l 0 #define s struct student s { int date; s *next; }; int n; s *cread() { s *q,*p,*head; n=0; q=p=head=(s*)malloc(sizeof(s)); scanf("%d",&q->date); ++n; while(q->date!=NULL) { q=(s*)malloc(sizeof(s)); scanf("%d",&q->date); ++n; if(q->date==NULL) p->next=head; else {p->next=q; p=q;} } return head;/////////////////////////构建单项循环链表 } int count(s *head) { s *q; int n=1; q=head->next; for(;q!=head;q=q->next) ++n; return n; }////////////////////////////////////////计算链表的长度 s *turn(s *head,int n) { int m=0,k; s *q,*p; p=head; while(m!=n-1) { k=1; while(k <3) { k++;q=p;p=p->next; //这两行不要,你这个是循环链表了,还搞这干吗? if(p==head) { q=p;p=p->next;} } printf("%d\n",p->date);///////////输出删除的节点数 q->next=p->next; free(p); p=q; //这里错了,应该是p=q->next;因为前面的k计数初始是1 m++; printf("\n"); } return p;///////////////////////////////返回最后剩下的节点地址 } print(s *head) { printf("%d",head->date); }//////////////////输出 main() { s *head,*p; int n; head=cread(); n=count(head); p=turn(head,n); print(p); }