在我使用C ++实现双向链接列表时,我无法理解为什么在insertFirst
中,始终需要执行pNewLink->pNext = pFirst
但是insertLast
如果列表不是空的,那么仅执行pNewLink->pPrevious = pLast
?否则,似乎两种方法似乎完全相反。
void insertFirst(double dd) //insert at front of list
{
Link* pNewLink = new Link(dd);
if( isEmpty() )
pLast = pNewLink;
else
pFirst->pPrevious = pNewLink;
pNewLink->pNext = pFirst;
pFirst = pNewLink;
}
void insertLast(double dd) //insert at end of list
{
Link* pNewLink = new Link(dd);
if( isEmpty() )
pFirst = pNewLink;
else
{
pLast->pPrevious = pLast;
pNewLink->pPrevious = pLast;
}
pLast = pNewLink;
}
答案 0 :(得分:1)
首先,您的实现似乎不正确,因为当列表为空时,您不应在pNewLink->pNext
中设置insertFirst
。
如果你做这个修改,两种方法看起来都会更像" symetric"。
如果您插入最后一个。你没有"下一个价值"所以你没有设置它,但你有以前的值,所以你设置它。
如果你先插入,你就没有"之前的价值"所以你没有设置它,但你有一个下一个值,所以你设置它。