📅  最后修改于: 2023-12-03 15:28:26.493000             🧑  作者: Mango
在本篇文章中,我们将介绍如何通过更改链表的链接来对包含0、1和2的链表进行排序的C++程序。算法的运行时间复杂度为O(n),其中n是链表中节点的数量。
我们将通过三个指针(即三个链表)来分别保存val为0、1和2的节点,从而达到排序的目的。具体实现过程如下:
下面是一个完整的C++实现,包括链表节点的定义和排序函数的实现:
#include<iostream>
using namespace std;
// 定义链表节点
struct ListNode{
int val;
ListNode* next;
ListNode(int x): val(x), next(NULL){}
};
// 排序函数的实现
ListNode* sortList(ListNode* head) {
ListNode *zero = NULL, *one = NULL, *two = NULL;
ListNode *cur = head;
while(cur != NULL){
if(cur->val == 0){
if(zero == NULL){
zero = cur;
}else{
zero->next = cur;
zero = zero->next;
}
}else if(cur->val == 1){
if(one == NULL){
one = cur;
}else{
one->next = cur;
one = one->next;
}
}else{
if(two == NULL){
two = cur;
}else{
two->next = cur;
two = two->next;
}
}
cur = cur->next;
}
// 将链表连接起来
if(zero != NULL){
head = zero;
if(one != NULL){
zero->next = one;
}else{
zero->next = two;
}
}
if(one != NULL){
if(two != NULL){
one->next = two;
}
}
if(two != NULL){
two->next = NULL;
}
return head;
}
// 主函数
int main(){
ListNode *head = new ListNode(2);
ListNode *cur = head;
cur->next = new ListNode(1);
cur = cur->next;
cur->next = new ListNode(0);
cur = cur->next;
ListNode *res = sortList(head);
while(res != NULL){
cout << res->val << "->";
res = res->next;
}
cout << "NULL" << endl;
return 0;
}
经过以上程序的操作,本程序会输出以下结果:
0->1->2->NULL
以上就是本程序的完整实现和输出结果。感谢您的阅读!