📌  相关文章
📜  用于对 0、1 和 2 的链表进行排序的 C++ 程序(1)

📅  最后修改于: 2023-12-03 15:11:16.621000             🧑  作者: Mango

用于对 0、1 和 2 的链表进行排序的 C++ 程序

本程序的功能是对只包含0、1和2的链表进行排序。

程序实现

程序实现主要包括两个部分:链表结构体定义和排序函数。

链表结构体定义

定义一个链表结构体,包含节点值和指向下一节点的指针:

struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};
排序函数

排序函数使用了计数排序的思想。由于链表只包含三种元素,可以使用三个计数器来记录0、1、2的个数,并将新链表串起来即可。

ListNode* sortList(ListNode* head) {
    int count[3] = {0, 0, 0};
    ListNode *cur = head;
    // 统计0、1、2的个数
    while (cur) {
        count[cur->val]++;
        cur = cur->next;
    }
    // 构造新链表
    cur = head;
    for (int i = 0; i < 3; i++) {
        while (count[i]--) {
            cur->val = i;
            cur = cur->next;
        }
    }
    return head;
}
使用方法

使用方法十分简单,只需要实例化一个链表、调用排序函数并输出即可。

int main() {
    ListNode *head = new ListNode(1);
    head->next = new ListNode(0);
    head->next->next = new ListNode(2);
    head = sortList(head);
    while (head) {
        cout << head->val << " ";
        head = head->next;
    }
    return 0;
}

输出结果为:0 1 2,符合预期。

总结

本程序使用了计数排序的思想,实现起来简单高效。由于链表结构的特殊性,需要注意指针的使用。