我的讲师将函数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
的节点的顺序”。如果受害者和第一人都指向同一个事物,并且我们删除了受害者,那么这不是也先删除吗?
最佳答案
如果受害者和第一人都指向同一个事物,并且我们删除了受害者,那么这不是也先删除吗?
在删除时,它们并不指向同一事物。
基本上,这里发生的是第二个节点成为第一个节点,然后删除了旧的第一个节点。
由于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
关于c++ - 此功能如何从链接列表中删除元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13657015/