C ++中的双向链表 - insertFirst与insertLast实现

时间:2016-01-06 21:58:45

标签: c++ doubly-linked-list

在我使用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;
}

1 个答案:

答案 0 :(得分:1)

首先,您的实现似乎不正确,因为当列表为空时,您不应在pNewLink->pNext中设置insertFirst

如果你做这个修改,两种方法看起来都会更像" symetric"。

如果您插入最后一个。你没有"下一个价值"所以你没有设置它,但你有以前的值,所以你设置它。

如果你先插入,你就没有"之前的价值"所以你没有设置它,但你有一个下一个值,所以你设置它。