c - 在 C 中使用双向链表时出现问题

标签 c linked-list doubly-linked-list

首先 我正在尝试从文件中读取列表,然后将其写入另一个文件中并将其显示在输出中。问题是我认为读取函数可以工作,但是当我尝试调用 displayData 函数时,我不断陷入无限循环。我是本章的初学者,所以我不明白为什么这种情况不断发生。这是我的两个功能:

void readData() {
    FILE* f;
    f=fopen("data.in","r");
    first = last = NULL;
    while (!feof(f)) {
        p = (NodeT *)malloc(sizeof(NodeT));
        fscanf(f,"%d",&p->key);
        if (first == NULL) { /* empty list */
            first = last = p;
            p->next = p->prev = NULL;
        }
        else { /*nonempty list */
            last->next = p;
            p->prev = last;
            last = p;
        }
    }
    fclose(f);
}

void displayData() {
    FILE* f;
    f=fopen("data.out","w");
    for (p = first; p!= NULL; p = p->next) {
        printf("%d ",p->key);
        fprintf(f,"%d ",p->key);
    }
    fclose(f);
}

另外,需要注意的是,我的 data.in 是:1 2 3 4 5 6 7 8 9 10。 还有我的结构:

typedef struct node_type {
    int key;
    struct node_type *next, *prev;
}NodeT;

NodeT *p, *first, *last;

任何帮助将不胜感激。非常感谢!

最佳答案

    else { /*nonempty list */
        last->next = p;
        p->prev = last;
        last = p;
    }

在非空列表情况下,您没有初始化p->next。它应该为 NULL,因为当您推到末尾时没有下一个元素。

    else { /*nonempty list */
        last->next = p;
        p->prev = last;
        p->next = NULL;
        last = p;
    }

关于c - 在 C 中使用双向链表时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33454410/

相关文章:

C - 无法向前迭代第二个字符串

c - 链表逻辑错误导致程序卡住

java - 相同的元素被插入到java中的LinkedList中

algorithm - 带有一些操作的双向链表

c - "complex float"和 "float complex"都是有效的 C 吗?

c - 将指向函数指针的指针存储在 void* 中

c - C中的二维数组

c - 当我将它作为指向通过 C 中另一个函数的函数的指针的引用传递时,兼容的指针类型是什么?

c++ - 如何在我的自定义列表迭代器类中将迭代器转换为 const_iterator?

c - 警告 : assignment from incompatible pointer type in linked list struct