在向量中插入元素并移动元素

时间:2014-10-27 15:11:47

标签: c++ linked-list

我正在使用矢量来编写链接列表(我知道我不应该使用矢量)。我试图实现一个函数来插入一个位置x的节点并在x之后移动所有元素但是由于某种原因它只需要原始位于x的元素和写入具有此值的所有剩余元素。

这是我遇到问题的功能:

//Insert element at x index
void LinkedList::insertAt(int x, int data) {
    Node* tempNode = new Node();
    Node* currentNode = vecList[x];
    Node* nextNode = vecList[x + 1];
    Node* previousNode = vecList[x - 1];

    if(x == count) {
        push_back(tempNode, data);
        return;
    }
    else {
        count++;
        for (int i = 0; i < getSize(); i++){
            vecList[x + 1]->next = vecList[x]->next;   // tranfer the address of 'temp->next' to 'temp'
            vecList[x + 1]->data = vecList[x]->data;
            if (vecList[x] == NULL){break;}
        }
        tempNode->data = data;
        tempNode->previous = previousNode;
        tempNode->next = nextNode;
        tempNode->id = x+1;

        vecList[x] = tempNode;
        vecList[x - 1]->next = tempNode; //Point previous node to this node
    }
}//Adds Node but replaces orignal Node

它将传入的值放到位置x,我认为我的问题是在x之后移动元素。

当我致电linkedlist.insertAt(2, 50);时,它正在执行:10, 20, 50, 30, 30,但预计会:10, 20, 50, 30 ,40

Node的定义:

struct Node {
    Node * previous;
    Node * next;

    int id;
    int data;
};

1 个答案:

答案 0 :(得分:0)

问题在于你的循环:

for (int i = 0; i < getSize(); i++){
    vecList[x + 1]->next = vecList[x]->next;   // tranfer the address of 'temp->next' to 'temp'
    vecList[x + 1]->data = vecList[x]->data;
    if (vecList[x] == NULL){break;}
}

您正在迭代i,但循环中的任何内容实际上都不会显示i。因此,您只需执行相同的操作getSize()次。我认为您打算将vecList[i + 1]分配给veclist[i]。此外,循环的下限不应为0,它应为x。为了进一步清楚起见,该变量的名称应该是pos或类似的东西。

在引用vecList[x + 1]vecList[x - 1]时也要小心。如果x为0或vecList.size() - 1,该怎么办?您将指向未定义的对象。