C ++在链表的开头和指定索引处插入元素的方法

时间:2014-03-17 00:43:38

标签: c++ insert linked-list nodes prepend

对于列表类,我尝试创建一个方法,将节点添加到列表开头的链表(例如void List::prepend(const Item& it))以及一个元素插入特定的元素列表中的索引:void List::insert(const Item& it, int index)

所以我可以在开始使用这些方法时使用一些帮助。

我已经创建了一个添加到列表末尾的方法:

void List::append(const Item& it) {
    Node *nodePtr = new Node(it, NULL);
    if(mySize == 0)
    {
        myFirst = nodePtr;
    }
    else
    {
        myLast->myNext = nodePtr;
    }
    myLast = nodePtr;
    mySize++;
}

但是其他两个并不是很好。

如果你想知道,我在这里有一个typedef:

typedef double Item;

3 个答案:

答案 0 :(得分:0)

问题是你只保存最后一项。 您必须将First Item保存到myFirst中。

Answer these questions: 
1. What happen if mySize = 1 ?
2. Where does nodePtr point next?  ( nodePtr->next)

对于你的问题:

void List::prepend(const Item& it) {
    Node *nodePtr = new Node(it, NULL);
    if(mySize == 0)
    {
        myFirst = nodePtr;
    }
    else{
        nodePtr->next = myFirst;
        myFirst = nodePtr;
    }
    mySize++;
}

答案 1 :(得分:0)

void List::prepend(const Item& it) {
    Node *nodePtr = new Node(it, NULL);
    if(mySize == 0)
    {
        //..
    }
    else
    {
        //..
    }    
    ++mySize;
}

void List::insert(const Item& it, int index) {
    Node *nodePtr = new Node(it, NULL); 
    if(index == 0)
    {
        //..
    }
    Node *currentNode = myFirst;
    int currentIndex = 0;
    while(currentIndex < index - 1) {
        //..
    }
    // insert before
    // ..
    ++mySize;
}

自己填写// ..区域。

答案 2 :(得分:0)

它似乎是你的函数(List :: append(const Item&amp; it))有点错误,你还没有将最后一个指针更新为NULL。