首页 > 解决方案 > 如何实现插入链表排序——按年龄排序

问题描述

我将如何在这里实现排序插入,我已经尝试了一段时间没有成功。

'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;
            }
}

标签: c++linked-list

解决方案


首先避免创建未排序的列表:确保任何新节点立即插入正确的位置,保持列表排序。

假设您的所有其他代码都很好,您可以按如下方式执行此操作。替换这些行:

 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;
}

推荐阅读