遍历C中的链接列表,陷入循环

时间:2016-10-09 18:37:41

标签: 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

请帮助!!

1 个答案:

答案 0 :(得分:1)

我已经老了,但是像你的堆栈这样的链接列表我看到你需要先在链表的尾部分配一个NULL值,然后每次添加一个节点,然后在新的尾部添加一个NULL。您没有为终端节点分配NULL值,因此您有一个无限循环。