C++归并排序如何处理链表排序

   2024-10-06 6840
核心提示:在C++中使用归并排序处理链表排序的步骤如下:定义链表节点结构体,包括节点值和指向下一个节点的指针。struct ListNode {int va

在C++中使用归并排序处理链表排序的步骤如下:

定义链表节点结构体,包括节点值和指向下一个节点的指针。
struct ListNode {    int val;    ListNode* next;    ListNode(int x) : val(x), next(nullptr) {}};
实现归并排序的递归函数,主要包括两个步骤:分割链表和合并链表。
ListNode* mergeSort(ListNode* head) {    if (head == nullptr || head->next == nullptr) {        return head;    }        // 快慢指针找中点    ListNode* fast = head;    ListNode* slow = head;    ListNode* prev = nullptr;        while (fast != nullptr && fast->next != nullptr) {        prev = slow;        slow = slow->next;        fast = fast->next->next;    }        prev->next = nullptr; // 断开链表        ListNode* left = mergeSort(head);    ListNode* right = mergeSort(slow);        return merge(left, right);}
实现合并链表的函数,用于将两个有序链表合并为一个有序链表。
ListNode* merge(ListNode* l1, ListNode* l2) {    ListNode* dummy = new ListNode(0);    ListNode* cur = dummy;        while (l1 != nullptr && l2 != nullptr) {        if (l1->val < l2->val) {            cur->next = l1;            l1 = l1->next;        } else {            cur->next = l2;            l2 = l2->next;        }        cur = cur->next;    }        if (l1 != nullptr) {        cur->next = l1;    } else {        cur->next = l2;    }        return dummy->next;}
调用归并排序函数对链表进行排序。
ListNode* sortList(ListNode* head) {    return mergeSort(head);}

通过以上步骤,就可以在C++中实现归并排序对链表进行排序。

 
举报打赏
 
更多>同类物流大全
推荐图文
推荐物流大全
点击排行

网站首页  |  关于我们  |  联系方式 | 网站留言    |  赣ICP备2021007278号