📅  最后修改于: 2023-12-03 15:11:16.621000             🧑  作者: Mango
本程序的功能是对只包含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
,符合预期。
本程序使用了计数排序的思想,实现起来简单高效。由于链表结构的特殊性,需要注意指针的使用。