gpt4 book ai didi

c - 通过构建尾部优化链表中的一个特例

转载 作者:太空宇宙 更新时间:2023-11-04 03:00:51 24 4
gpt4 key购买 nike

我想通过将节点附加到尾部来构建列表 {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);
}

最佳答案

如果您所有的访问指针都从头部移动到尾部,那么将节点添加到尾部会将它们暴露给在列表“查询”开始时不存在的"new"数据。

与您的客户交谈,可能不仅仅是“优化”受到威胁。

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

如果不了解 Push 是做什么的,我猜它会将一个节点推到链表的顶部,就好像它是一个堆栈一样。

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

到目前为止,还不错。

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

看起来您只是Push尾部的几个节点,但我看不到您实际更新尾部的位置以保持它对列表末尾的引用。在我的阅读中,head 仍然指向列表的头部,tail 仍然指向列表的头部(来自赋值 tail = head) 并且您在尾部之外还有很多“额外”节点。

是这个问题吗?

关于c - 通过构建尾部优化链表中的一个特例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12301315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com