c - C 遍历链表,陷入循环

标签 c linux while-loop linked-list infinite-loop

我总是陷入循环,但我不知道如何解决它。我们必须遍历列表。它会打印,但不会继续执行下一个测试功能。我认为代码没有识别列表的末尾并且没有退出 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/

相关文章:

c++ - 带有双移位和以下移位运算的 C/C++ 除法

linux - 如何使用 egrep 只返回一行的一部分

我可以使用 strcmp 作为 bool 值吗?

c - 没有输出显示到端子,但是值显示在GDB中

linux - 远程调试时将参数传递给 ARM 程序

Python - 虽然为真 : Try Except Else - Program Flow Question

java - 创建一个java循环,当用户输入出生年份时计算用户的年龄,有什么想法吗?

C双链表根据位置插入

c - 一个 token 会导致段错误,而另一个 token 则不会

mysql - 我的一个查询现在在正常工作 10 年后只返回一条记录 - 我没有更改任何代码