91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

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
大兴区| 玉屏| 东乡族自治县| 桃江县| 巫山县| 吉安县| 泸定县| 武胜县| 盐亭县| 永清县| 四川省| 金门县| 拉萨市| 明光市| 盐源县| 方山县| 洪江市| 九龙坡区| 海门市| 南昌市| 普安县| 岚皋县| 武汉市| 罗江县| 弥渡县| 玉林市| 揭阳市| 清流县| 宁化县| 准格尔旗| 徐水县| 叶城县| 东明县| 高邑县| 靖远县| 白玉县| 内黄县| 六枝特区| 高碑店市| 晋中市| 天台县|