📌  相关文章
📜  通过更改链接对 0、1 和 2 的链表进行排序的 C++ 程序(1)

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

通过更改链接对0、1和2的链表进行排序的C++程序

在本篇文章中,我们将介绍如何通过更改链表的链接来对包含0、1和2的链表进行排序的C++程序。算法的运行时间复杂度为O(n),其中n是链表中节点的数量。

算法思路

我们将通过三个指针(即三个链表)来分别保存val为0、1和2的节点,从而达到排序的目的。具体实现过程如下:

  1. 定义三个指针zero、one和two并初始化为NULL。
  2. 遍历链表,将节点分别加入对应的链表中。
  3. 将zero链表的尾部链接到one链表的头部并将one链表的尾部链接到two链表的头部,从而得到最终排好序的链表。
程序实现

下面是一个完整的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

以上就是本程序的完整实现和输出结果。感谢您的阅读!