对于家庭作业,我必须创建一个由多个士兵组成的节点并打印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;
}
创建的海绵bob0创建了spongebob1创建了spongebob2将军0 1 2
这是输出如果我尝试重新排列圆圈功能,则会得到分段转储]
现在,如果n是3而不是123,我得到012
我想这取决于create_soldier(i)
对i
中的值的处理,但是请注意,循环使用从0到n-1,而不是1到n的i
值。
也许您应该将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()
应该做什么,所以我没有建议如何解决它。