我一直陷入循环,但我不知道如何修复它。我们必须遍历这个列表。它打印了,但没有进入下一个测试函数。我认为代码没有识别列表的结尾,也没有退出while循环。
void traverse_int(struct s_node* head)
{
struct s_node* next_node;
int* x;
next_node=head;
while(next_node != NULL)
{
if (next_node->elem == NULL)
{
my_str("NULL");
}
else
{
x=(int*) next_node->elem;
my_int(*x);
}
my_str(" ");
next_node=next_node->next;
}
my_char('n');
}
这是我使用的测试用例:
a = 17;
b = 10;
c = 16;
d = 95;
add_elem(&a, &head);
add_elem(&b, &head);
add_elem(&c, &head);=
add_elem(&d, &head);
traverse_int(head); my_str("nshould print 95 16 10 17n");
它不输出my_str,它只是被捕获并输出:95 16 10 17
它应该打印:
95 16 10 17
应该打印95 16 10 17
请帮助! !
我老了,但是像你的堆栈这样的链表,我看到你需要先给链表的尾部分配一个NULL值,然后每次添加一个节点,然后向新的尾部添加一个NULL。您没有为结束节点分配NULL值,因此您有一个无限循环。