【发布时间】:2016-05-14 07:36:41
【问题描述】:
我正在尝试实现一个循环链表,但它没有像我预期的那样工作。即使我用insertAfter 插入两个元素,printList 也只打印一个节点。这是一个最小的例子:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
struct dnode_elm {
int item;
struct dnode_elm *next, *prev;
};
struct dnode_elm *
insertAfter(struct dnode_elm *a, int value) {
struct dnode_elm *v= malloc(sizeof(struct dnode_elm));
v->item=value;
a->next=v;
v->prev=a;
v->next=a->next;
a->next->prev=v;
return v;
}
void
printList(struct dnode_elm *h) {
while (h != h->next) {
h = h->next;
printf("%d --> ",h->item);
}
}
int
main(void) {
struct dnode_elm h = { INT_MAX, &h, &h };
insertAfter(&h, 1);
insertAfter(&h, 2);
printList(&h);
}
【问题讨论】:
-
另外,编译时启用警告并将它们设置为错误。 例如
gcc -Wall -Werror。 -
另外,请做一个小例子,添加演示问题的实际函数调用,现在我们只需要理解韩语并猜测您输入的内容即可重现问题。跨度>
-
@AnttiHaapalaI 添加了
但仍然无法正常工作...仅打印出虚拟节点 -
此外,如果您没有
#include <stdlib.h>,malloc可能会在许多平台上中断,因为它假定隐式返回int而不是指针。它似乎可以工作,但是当指针不适合 int 时会中断。
标签: c linked-list circular-list