【发布时间】:2019-11-13 17:40:45
【问题描述】:
我有一个链表,我必须将对象插入其中,根据对象的一个字段,我必须以正确的顺序将节点插入到链表中。
在使用数组和向量时,我的排序工作完美,但在链表的插入方面遇到了麻烦。我的 getLink() 调用用于获取我的链接的函数,即 = next。
void sortedInsert(DomNodePtr& head, string fName, string lName, float CGPA, int rScore,string prov){
DomNodePtr here = head;
DomNodePtr tempPtr;
tempPtr = new DomNode(fName, lName, CGPA, rScore, prov, head);
while (here->getCumGPA() > CGPA && here->getLink() != NULL){
here = here->getLink();
}
if (here->getCumGPA() < CGPA){
tempPtr->setLink(here->getLink());
here->setLink(tempPtr);
}
else if (here->getCumGPA() > CGPA){
here = tempPtr;
}
}
基本上,我希望累积 GPA 最高的学生排序高于 CGPA 较低的学生。我知道我的部分问题是我没有插入 CGPA 较低的学生,但我正在努力解决这部分问题。当我打印链接列表时,它也输出了大约 10 个学生,而实际上他们大约有 100 个并且它们的顺序不正确。
【问题讨论】:
-
缩进代码是第一步。
-
@n.m.我为糟糕的格式道歉,我已经解决了。
-
你真的应该从简单开始而不是这样。你能建立一个简单的
int排序的链表吗?如果可以,请将int替换为您的班级,因为代码几乎相同。如果您无法为int的链表实现它,那么您几乎没有机会尝试为更复杂的类型执行此操作。 -
尝试找出一个失败的小例子,即最多两三个学生。当你有 100 名学生时,很难弄清楚哪里出了问题。然后使用调试器甚至铅笔和纸来准确跟踪您的代码对链接所做的操作。希望到那时错误所在的位置会变得很明显。
-
@john 非常感谢您的反馈,您太棒了!这实际上是我为解决它所做的。 :)
标签: c++ linked-list nodes singly-linked-list