【发布时间】:2018-10-19 14:50:24
【问题描述】:
假设我有一个单链表,其中包含从文件中收集的单词,我希望能够从该文件中从头到尾以及从尾到头打印这些单词。第一个选项的执行被这样编码:
void writeWords(t_list *lp, FILE *fp, int total_num_words) {
t_list *aux;
aux = lp;
while(aux != NULL){
writeOneWord((t_word*) getItemList(aux), fp, total_num_words);
aux = getNextListElement(aux);
}
}
即按正常顺序迭代列表,每个节点的内容由writeOneWord打印。
现在,我的疑问是:正如我所说,我也希望能够从头到尾遍历列表,同时保持列表不变,所以 没有反转时间>。我知道代码应该对应于某种递归实现,但直到现在我一直试图这样做无济于事。任何人都可以对此有所了解吗?
【问题讨论】:
-
您当然意识到,虽然您可以这样做,但如果必须这样做,则表明单链表是选择的错误数据结构。
-
您说要保留链表。临时修改可以吗?如果允许临时修改,则只需恒定的内存开销即可完成(与递归不同)。