c - 双向链表工作不正常

标签 c pointers doubly-linked-list

我有一个双向链表。当我告诉它向前打印列表中的项目时,它工作正常。当我告诉它向后打印列表中的项目时,它返回 300 作为最后一个值,而它应该返回 100。我在节点定义(它们按顺序定义)或 dubblePrev (这是一个相当简单的递归函数),虽然我对指针(以及,通过扩展,链接列表)不熟悉,所以我可能错过了一些看起来相当明显的东西。这是怎么回事?

这是我的代码:

// Doubly linked list

#include <stdio.h>

struct entry
    {
        int value;
        struct entry *next;
        struct entry *prev;
    };

void dubbleNext (struct entry *e) {
    if (e != '\0') {
        printf ("%d\n", e->value);
        dubbleNext(e->next);
    }
}

void dubblePrev (struct entry *e) {
    if (e != '\0') {
        printf ("%d\n", e->value);
        dubbleNext(e->prev);
    }
}

int main (void)
{


    struct entry n1, n2, n3;
    int i;

    n1.value = 100;
    n2.value = 200;
    n3.value = 300;

    n1.next = &n2;
    n2.next = &n3;
    n3.next = NULL;

    n1.prev = NULL;
    n2.prev = &n1;
    n3.prev = &n2;

    dubbleNext (&n1);
    dubblePrev (&n3);

    return 0;
}

最佳答案

您的“doublePrev”函数中有错字。试试这个。

void dubblePrev (struct entry *e) {
if (e != '\0') {
    printf ("%d\n", e->value);
    dubblePrev(e->prev);
}

关于c - 双向链表工作不正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29926293/

相关文章:

c++ - 双向链表 std::unique_ptr 类在删除节点时无法按预期工作

c++ - 在C++中实现双向链表复制构造函数

c - 带地址的数组

c - 如何使用 HAL 库读取和显示 STM32F4 的 ADC 值

c - 在 C 头文件中声明指针数组并赋值?

C++ 安全返回指向迭代器的指针以进行 map 插入?

algorithm - 为什么使用双向链表删除哈希表的元素是O(1)?

c - 如何设计一个易于导入的全局 float 组

c - 查找 EF 上下文的正确名称

c - 尝试处理 Fortran 指针 - 调用 c_f_pointer