void push_front(const dataType &item)
{
head=new dnode<dataType> (item,NULL,head);
if (!empty())
head->next->prev=head;
else
tail=head;
numItems++;
}
我这里有一段代码,但是我真的不明白,head->next->prev=head
行是做什么的?有人可以解释一下,谢谢
答案 0 :(得分:13)
如果列表如下所示:
***************
head->*Data: XXX *
*Prev: NULL * ***************
*Next: --------> * Data: YYY *
*************** <----Prev: * ***************
* Next: --------> * Data: ZZZ *
***************<------Prev: *
* Next: NULL *
***************
现在:添加新项目
head = new dnode<dataType> (AAA,NULL,head);
***************
head->*Data: AAA *
*Prev: NULL * ***************
*Next: --------> * Data: XXX *
*************** * Prev: NULL * ***************
* Next: --------> * Data: YYY *
***************<------Prev: * ***************
* Next: --------> * Data: ZZZ *
***************<------Prev: *
* Next: NULL *
***************
注意链中的第二项。 Prev成员仍为NULL 所以要将第二个项目的链接添加回头部。
head->next->prev=head;
***************
head->*Data: AAA *
*Prev: NULL * ***************
*Next: --------> * Data: XXX *
***************<-----Prev: * ***************
* Next: --------> * Data: YYY *
***************<------Prev: * ***************
* Next: --------> * Data: ZZZ *
***************<------Prev: *
* Next: NULL *
***************
所以你可以想到这一行:
head->next->prev=head;
// This is equivelant too:
oldHead = head->next;
oldHead->prev = head;
答案 1 :(得分:1)
大概head=new dnode<dataType> (item,NULL,head);
将新的head->next
设置为上一个head
,因此head->next->prev=head;
正在修复前一个头的prev
字段(之前是{{} 1}},现在是he NULL
}。