对于作业,我必须创建一个由多个士兵组成的节点,并打印n位数字,即5,先打印1至5,然后再5至1
现在如果n为3而不是123,我得到012
我尝试修复指针和for循环...
Spongebob* create_reverse_circle(int n)
{
Spongebob *p= NULL;
for (int i=0; i<n; i++)
{
//everytime a soldier is created, it goes in beg. of
push(&p,create_soldier(i));
}
printf("checkmate\n");
return p;
}
void push(Spongebob **p, Spongebob* temp)
{
if(*p==NULL)
{
temp->next = temp->prev = temp;
*p = temp;
return;
}
Spongebob *last = (*p)->prev;
temp->next = *p;
(*p)->prev = temp;
temp->prev = last;
last->next =temp;
}
Spongebob* rearrange_circle(Spongebob* head)
{
Spongebob* temp = head;
Spongebob* head2 = NULL;
Spongebob* next = NULL;
do
{
next = head->next;
temp->next = head2->next;
head2->next = temp;
temp = head2->prev;
}
while(head!= NULL);
if(temp != NULL )
head2 = temp->prev;
}
创建了spongebob0
创建了spongebob1
创建了spongebob2
将军
0 1 2
这是输出 如果我尝试重新排列圆圈功能,就会得到分段转储
答案 0 :(得分:0)
现在如果n为3而不是123,我得到012
我猜这取决于create_soldier(i)
对i
中的值的处理方式,但是请注意,循环使用的i
值从0到n-1,而不是1到n。 / p>
也许您应该将for
循环的开始和结束值更改为:
for (int i=1; i<=n; i++)
如果我尝试重新排列圆圈功能,则会得到分段转储
Spongebob* rearrange_circle(Spongebob* head)
{
Spongebob* temp = head;
Spongebob* head2 = NULL;
Spongebob* next = NULL;
do
{
next = head->next;
temp->next = head2->next;
^^^您正在取消引用空指针head2
。
head2->next = temp;
temp = head2->prev;
}
while(head!= NULL);
^^^ head!=NULL
将始终为true(导致无限循环),除非使用空指针调用了rearrange_circle()
(在这种情况下,前一个next = head->next;
是一个空指针)取消引用。
if(temp != NULL )
head2 = temp->prev;
^^^这是该函数的结尾,并且现在不使用head2
,所以上面的语句似乎没有意义。
}
我不知道rearrange_circle()
应该做什么,所以我没有建议如何解决它。