我正在使用矢量来编写链接列表(我知道我不应该使用矢量)。我试图实现一个函数来插入一个位置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;
};
答案 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
,该怎么办?您将指向未定义的对象。