我鼓励在没有oo概念的情况下使用C ++。我一直在研究名为" InsertIntoSortedList"的函数。使用双向链表。但是,它允许我插入第一个节点。对于第二个节点及之后,它将从函数跳出。Here is the Sample Output。 代码在简单程序上工作正常,所以我试图在更复杂的程序上使用它。我将把这两个程序的编码放在下面。
void InsertIntoSortedList(){
newnode = new carlist;
newnode->next = NULL;
newnode->back = NULL;
if (head == NULL) {
cout << "List is empty, Please insert Data: " << endl;
cout << "ID: ";
cin >> newnode->id;
cout << "Description: ";
cin >> newnode->description;
cout << "Price: ";
cin >> newnode->price;
cout << "Stock: ";
cin >> newnode->stock;
head = tail = newnode;
}
else if (newnode->price < head->price) {
InsertAtBeginning();
}
else {
temp = head;
while (temp != NULL) {
if (newnode->price > temp->price) {
previous = temp;
}
else {
break;
}
temp = temp->next;
}
if (temp == NULL) {
InsertAtEnd();
}
else {
newnode->next = previous->next;
previous->next->back = newnode;
previous->next = newnode;
newnode->back = previous;
}
}
它在这个程序上运行良好
void insertIntoSortedList(int eid) {
newnode = new employee;
newnode->employeeID = eid;
newnode->next = NULL;
newnode->back = NULL;
if (head == NULL) {
head = tail = newnode;
}
else if (eid < head->employeeID) {
insertatBeginning(eid);
}
else {
temp = head;
while (temp != NULL) {
if (eid > temp->employeeID) {
previous = temp;
}
else {
break;
}
temp = temp->next;
}
if (temp == NULL) {
insertAtEnd(eid);
}
else {
newnode->next = previous->next;
previous->next->back = newnode;
previous->next = newnode;
newnode->back = previous;
}
}
有人可以向我解释一下这个问题是什么,为什么它不起作用?我甚至试图绘制双重链表,我认为它应该工作得很好。这件事一直困扰着我一整夜。谢谢你提前。
答案 0 :(得分:1)
一些问题:
1)函数获取任何数据的唯一位置是head为null。从if语句中取出输入代码,然后从那里进行调试。
2)要获取多个节点,则需要某种循环。最好将该循环以及刚删除的输入代码放入主函数中:
int main() {
newnode = new carlist;
while (newnode != nullptr)
{
newnode->next = nullptr;
newnode->back = nullptr;
cout << " Please insert Data: " << endl;
cout << "ID: ";
cin >> newnode->id;
cout << "Description: ";
cin >> newnode->description;
cout << "Price: ";
cin >> newnode->price;
cout << "Stock: ";
cin >> newnode->stock;
InsertIntoSortedList(newnode);
cout << "To exit write \"exit\", or any other key to continue : ");
string exitnow;
cin >> exit;
if (exitnow == "exit")
newnode = nullptr;
else
newnode = new carlist;
}
return 0;
}
对于我们没有看到的其余代码,最好使用调试器并尝试了解每个控制路径的作用。