C++怎么实现3个链表排序整合到一起

2023-04-24 00:32:00 整合 排序 链表

C++实现3个链表排序整合到一起的方法有很多,下面介绍一种常用的方法,即利用归并排序的思想:

1.首先,定义一个空的链表,用来存储排序后的结果;

2.将3个链表的头结点分别赋值给3个指针,比较这3个指针指向的结点的值,将较小的结点值插入到空链表中;

3.将较小的结点插入到空链表中后,将该指针后移一位,继续比较,直到3个链表中的结点都比较完;

4.重复上述步骤,直到3个链表中的结点都被比较完,空链表中就是排序后的结果。

下面是C++实现3个链表排序整合到一起的代码:

// 定义链表结构
struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

// 合并3个链表
ListNode* mergeThreeLists(ListNode* l1, ListNode* l2, ListNode* l3) {
    ListNode* dummy = new ListNode(0);
    ListNode* cur = dummy;
    ListNode* p1 = l1;
    ListNode* p2 = l2;
    ListNode* p3 = l3;
    while (p1 != NULL || p2 != NULL || p3 != NULL) {
        int val1 = p1 == NULL ? INT_MAX : p1->val;
        int val2 = p2 == NULL ? INT_MAX : p2->val;
        int val3 = p3 == NULL ? INT_MAX : p3->val;
        int minVal = min(min(val1, val2), val3);
        if (minVal == val1) {
            cur->next = p1;
            p1 = p1->next;
        } else if (minVal == val2) {
            cur->next = p2;
            p2 = p2->next;
        } else {
            cur->next = p3;
            p3 = p3->next;
        }
        cur = cur->next;
    }
    return dummy->next;
}

以上就是C++实现3个链表排序整合到一起的方法,利用归并排序的思想,将3个链表的结点按照从小到大的顺序插入到空链表中,最终得到排序后的结果。

相关文章