我的讲师将函数remove()定义为:
struct node
{
node *next;
int value;
}
int IntList::remove()
{
node *victim = first;
int result;
if(isEmpty()) throw listIsEmpty();
first = victim->next;
result = victim->value;
delete victim;
return result;
}
其中first
“指向表示此IntList
的节点序列。”
如果受害者和第一个都指向相同的东西,并且我们删除了受害者,那么这次也不删除吗?
答案 0 :(得分:3)
如果受害者和第一个都指向相同的东西,并且我们删除了受害者,那么这次也不删除吗?
在删除时,他们并没有指向同一件事。
基本上这里发生的是第二个节点成为第一个节点,然后删除旧的第一个节点。
自删除前first = victim->next
起,first == victim
将永远不会相同,除非victim->next == victim
永远不会发生在链接列表中。
对于简化示例,假设:
first is at address 0xDEAD (crazy address, but go with it)
first->next is at address 0xF00D
然后就像这样:
node *victim = first; //victim = 0xDEAD
first = victim->next; //first = 0xF00D, so first now = first->next
delete victim; //victim = 0xDEAD, so you deleted the original first
答案 1 :(得分:0)
否,绝对不会删除列表中的第一个节点。
因为在'int IntList :: remove()'函数中,它首先向前移动第一个节点,然后删除受害节点。
因此,它只会删除受害者,在您的情况下,列表的下一个节点将是新的第一个节点。 :)