亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

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
镇雄县| 蛟河市| 乌恰县| 江永县| 黔南| 昌邑市| 丹江口市| 绍兴市| 天津市| 忻城县| 台山市| 泽库县| 武邑县| 浦北县| 扶绥县| 堆龙德庆县| 南投县| 海宁市| 阜宁县| 剑阁县| 安岳县| 楚雄市| 周口市| 武宣县| 开鲁县| 平定县| 青川县| 贺州市| 肥西县| 阳曲县| 长沙县| 盘锦市| 高清| 伊川县| 辽宁省| 外汇| 洪江市| 公主岭市| 泰顺县| 大竹县| 黄骅市|