中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

C++歸并排序如何處理鏈表排序

c++
小樊
82
2024-07-16 19:49:49
欄目: 編程語言

在C++中使用歸并排序處理鏈表排序的步驟如下:

  1. 定義鏈表節點結構體,包括節點值和指向下一個節點的指針。
struct ListNode {
    int val;
    ListNode* next;
    ListNode(int x) : val(x), next(nullptr) {}
};
  1. 實現歸并排序的遞歸函數,主要包括兩個步驟:分割鏈表和合并鏈表。
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);
}
  1. 實現合并鏈表的函數,用于將兩個有序鏈表合并為一個有序鏈表。
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;
}
  1. 調用歸并排序函數對鏈表進行排序。
ListNode* sortList(ListNode* head) {
    return mergeSort(head);
}

通過以上步驟,就可以在C++中實現歸并排序對鏈表進行排序。

0
衡山县| 平山县| 湛江市| 昭苏县| 大洼县| 金寨县| 故城县| 呈贡县| 新津县| 德惠市| 邵阳市| 乡宁县| 琼海市| 包头市| 辉县市| 道孚县| 江城| 临泉县| 花莲市| 崇义县| 两当县| 永济市| 将乐县| 黄陵县| 泽普县| 林西县| 山东| 黄山市| 长岭县| 万山特区| 布拖县| 新安县| 鄂州市| 沭阳县| 抚远县| 清河县| 峨山| 平潭县| 澎湖县| 桂东县| 陵川县|