通过尾部构建优化链表中的特殊情况

时间:2012-09-06 13:34:14

标签: c linked-list

我想通过将节点附加到尾部来构建列表{1,2,3,4,5}。出于客户端的目的,使用尾指针在最后一个节点之后插入所有其他节点。这个解决方案唯一的“问题”是可以优化第一个节点的编码单独特殊情况,客户端正在按我。尽管如此,这种方法在理论上对于生产代码应该是可靠的...至少我想到,当我到达尾部时它一直抛出空指针异常......我错过了什么?

struct node* BuildWithSpecialCase() {
    struct node* head = NULL;
    struct node* tail;
    int i;

    Push(&head, 1);
    tail = head;

    for (i=2; i<6; i++) {
        Push(&(tail->next), i); 
    }
    return(head); 
}

1 个答案:

答案 0 :(得分:2)

如果所有的访问指针都是从头到尾移动,那么向尾部添加节点会将它们暴露给&#34; new&#34;在查询&#34;时没有存在的数据。列表的开头。

与您的客户交谈,也许不只是&#34;优化&#34;危在旦夕。

---看到你的代码编辑后编辑---

如果不了解Push正在做什么,我猜它会将链接列表顶部的节点推送到堆栈上。

Push(&head, 1);
tail = head;

到目前为止,非常好。

for (i=2; i<6; i++) {
    Push(&(tail->next), i); 
}

您似乎只是Push在尾部编辑了几个节点,但我无法看到您实际更新尾部的位置以维护它对列表末尾的引用。在我的阅读中,head仍然指向列表的头部,tail仍然指向列表的头部(来自作业tail = head)并且您有很多&#34 ;额外&#34;超越尾部的节点。

这是问题吗?