gpt4 book ai didi

c++ - 链表指针赋值为什么我们不能直接将tail赋值给temp而不是tail->tail next

转载 作者:行者123 更新时间:2023-11-28 04:35:06 25 4
gpt4 key购买 nike

void add_node(int n) {

node *tmp = new node;
tmp->data = n;
tmp->next = NULL;

if(head == NULL) {
head = tmp;
tail = tmp;
}
else {
tail->next = tmp;
tail = tail->next;
}
}

在else语句中,为什么我不能直接赋值tail=tmp;而不是 tail=tail->next;我有什么遗漏吗?提前致谢!

最佳答案

让我们列出一个简单的小列表:

+-------+     +-------+     +-------+| node1 | --> | node2 | --> | node3 |+-------+     +-------+     +-------+^                           ^|                           |head                        tail

现在要在列表的末尾添加一个新节点,我们首先将新节点添加到列表中,方法是使 tails next 指针指向新节点:

+-------+     +-------+     +-------+     +-------+| node1 | --> | node2 | --> | node3 | --> | node4 |+-------+     +-------+     +-------+     +-------+^                           ^|                           |head                        tail

这就是赋值 tail->next = tmp 所做的。

然后我们更新 tail 以指向新的尾部:

+-------+     +-------+     +-------+     +-------+| node1 | --> | node2 | --> | node3 | --> | node4 |+-------+     +-------+     +-------+     +-------+^                                         ^|                                         |head                                      tail

这就是赋值 tail = tail->next 所做的。当然,这也可以通过执行 tail = tmp 来完成。

两个作业的顺序很重要。


现在,如果您以相反的方式进行操作,首先分配 tail = tail->next,当我们有

+-------+     +-------+     +-------+| node1 | --> | node2 | --> | node3 |+-------+     +-------+     +-------+^|head

你不再有尾部了!您不知道列表在哪里结束,也不知道在哪里插入新节点,除非您遍历整个列表以找到其 next 指针为空指针的节点。

关于c++ - 链表指针赋值为什么我们不能直接将tail赋值给temp而不是tail->tail next,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51694133/

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