在矢量中插入元素并在其后移动元素



我正在用一个向量来写一个链表(我知道我不应该用向量)。我试图实现一个函数,将节点插入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;
};

问题在于您的循环:

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怎么办?您将指向一个未定义的对象。

相关内容

  • 没有找到相关文章

最新更新