c++ - 如何实现插入链表排序——按年龄排序
问题描述
我将如何在这里实现排序插入,我已经尝试了一段时间没有成功。
'isEmpty' 方法检查是否 head == NULL,并且 insert at first 方法在插入用户输入的详细信息后将指针指向 NULL。
void insert(Person *&head, Person *&last, int age, string name, string surname, char gender)
{
if(isEmpty(head))
{
insertAsFirst(head, last, age, name, surname, gender);
}else
{
Person *temp = new Person;
temp ->age = age;
temp -> surname = surname;
temp -> name = name;
temp -> gender = gender;
temp->next = NULL;
last -> next = temp;
last = temp;
}
}
解决方案
首先避免创建未排序的列表:确保任何新节点立即插入正确的位置,保持列表排序。
假设您的所有其他代码都很好,您可以按如下方式执行此操作。替换这些行:
temp->next = NULL;
last -> next = temp;
last = temp;
...有了这个:
if (age <= head->age) {
temp->next = head;
head = temp;
return;
}
Person *curr = head;
// Find insertion point
while (curr->next != nullptr && age > curr->next->age) {
curr = curr->next;
}
// Insert new node after curr
temp->next = curr->next;
curr->next = temp;
if (temp->next == NULL) {
last = temp;
}
推荐阅读
- vue.js - Vue js 动态更新设置/取消设置类
- java - Spring Security Web 应用程序上下文不加载 bean
- magento - Magento CE 从 1.9.3.6 升级到 1.9.3.10 总是导致 1.9.3.6
- c - 在C中迭代具有相同向量的矩阵
- c# - 即使触发了 MenuStripItem 快捷方式,也会引发 KeyDown 事件
- python - Spark 集群上的 Keras/Tensorflow GridSearchCV
- sql - Microsoft SQL Server 中年份和季度的聚合函数
- r - 自动检测短语的开始和结束行数
- javascript - Firefox 的 Math.round 或 Date 是否不同?
- javascript - 当我有五个具有相同选项和值的选择时,如何从另一个选择标签中删除选定的选项?