我总是陷入循环,但我不知道如何解决它。我们必须遍历列表。它会打印,但不会继续执行下一个测试功能。我认为代码没有识别列表的末尾并且没有退出 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 17\n");
它不会打印 my_str 它只是被捕获并打印: 95 16 10 17
它应该打印:
95 16 10 17
应打印 95 16 10 17
请帮忙!!
最佳答案
我很旧,但是对于像这里的堆栈一样的链接列表,我发现您需要首先为链接列表的尾部分配一个 NULL 值,然后每次添加节点时向新的尾部添加一个 NULL 。您没有为最终节点分配 NULL 值,因此出现无限循环。
关于c - C 遍历链表,陷入循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39947150/