所以我试图在C ++中创建一个Linked List类,并且我在插入新元素时遇到了麻烦。我试图以这样的方式插入它们,在任何时候链接列表将始终按升序排列,我相信它称为插入排序。无论如何,我的插入方法存在问题,如果我尝试插入多个元素,我的getNext方法会出现一些错误,它只是获取指向列表中下一个节点的指针。如果我只是一个接一个地插入数据,我的程序工作正常,但由于某种原因,这给了我问题,任何想法可能是什么?
插入方法:
void insert(int data){
ListNode *NewNode = new ListNode(data, NULL);
ListNode *temp = Head;
if(Head -> getNext() == NULL){
Head -> setNext(NewNode);
cout<<data<<" has been inserted"<<endl;
}
else{
while((temp -> getNext() != NULL) || (temp -> getNext() -> getData() < data)){
temp = temp -> getNext();
}
if(temp -> getData() == data){
cout<<"Data is already in list"<<endl;
return;
}
if(temp -> getNext() != NULL){
temp ->setNext(NewNode);
cout<<data<<" has been inserted"<<endl;
return;
}
if(temp -> getNext() -> getData() > data){
NewNode -> setNext(temp -> getNext());
temp ->setNext(NewNode);
cout<<data<<" has been inserted"<<endl;
return;
}
}
}
答案 0 :(得分:0)
首先,修复此if(Head -> getNext() == NULL)
。这不包括从空列表开始的可能性,因此请检查Head == NULL
是否为true,如果为true,则新节点将变为Head。
不看其余的代码,你的while循环条件是错误的。循环将一直运行,直到下一个节点为NULL,因为检查数据会短路。尝试使用和运算符。
while((temp -> getNext() != NULL) && (temp -> getNext() -> getData() < data))
如果下一个节点为NULL或下一个节点的数据大于试图添加的数据,则停止循环。循环完成后,您必须插入逻辑以确定它是什么情况。