C中的双重链表

时间:2013-09-22 14:53:39

标签: c pointers struct linked-list doubly-linked-list

我正在教自己C而我现在正试图学习双重链表。按照本书的教程,我发现了一些问题:

typedef struct _seg {
   int  bits[256];
   struct _seg *next, *prev;
} seg;
EXTERN seg *head;
EXTERN seg *last;

根据这样的代码,我知道要从头开始查看链表,我可以这样做:

seg *p;
p = head;
for ( i = 0; i < k; i++)              
p = p->next;

但是,如何从最后一个节点(定义为最后一个节点)反向浏览链接列表?

1 个答案:

答案 0 :(得分:2)

你可以对称地推理,并编码,例如。

seg *p = last;
for (int j=0; j < k && p != NULL; j++)
  p = p->prev;

我添加了测试p != NULL以避免undefined behavior(当列表中的元素少于k时;在许多系统上,如果您发生segmentation violation崩溃在这种情况下省略测试。)

不要忘记在编译时启用所有警告和调试信息(例如使用gcc -Wall -g编译)并学习如何使用调试器(例如gdb)。

BTW,C++11是一种与C99或C11不同的语言(但具有一些兼容性),并使用std::list为链接列表提供语言支持(通过其标准库)。