对于家庭作业,我必须创建一个由多个士兵组成的节点并打印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("checkmaten");
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;
}
创建海绵宝宝0 创建海绵宝宝1创建海绵宝宝2 将死
0
1
2
这是输出 如果我尝试重新排列圆函数,我会得到一个分段转储
现在如果 n 是 3 而不是 123,我得到 012
我想这取决于create_soldier(i)
如何处理i
中的值,但请注意,循环使用从 0 到 n-1 的i
值,而不是 1 到 n。
也许您应该将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()
是使用 null 指针调用的(在这种情况下,前一个next = head->next;
是空指针取消引用。
if(temp != NULL )
head2 = temp->prev;
^^^ 这是在函数的末尾,现在不使用head2
,所以上面的陈述似乎有点毫无意义。
}
我不知道rearrange_circle()
应该做什么,所以我没有建议如何解决它。