链表排序

来源:互联网 发布:常见浏览器js兼容问题 编辑:程序博客网 时间:2024/05/24 00:14

        可以用对数组进行排序的方法对链表进行排序,但由于链表有单向访问的特点所以用归并排序比较合理。

     ListNode *Merge(ListNode *pre1, ListNode *pre2){        ListNode *fir = pre1 -> next;        ListNode *sec = pre2 -> next;        ListNode *result = new ListNode(-1);        ListNode *p = result;                while(fir != nullptr && sec != nullptr){            if(fir -> val < sec -> val){                p -> next = fir;                p = p -> next;                fir = fir -> next;            }else{                p -> next = sec;                p = p -> next;                sec = sec -> next;            }        }                if(fir == nullptr){            while(sec != nullptr){                p -> next = sec;                p = p -> next;                sec = sec -> next;            }            p -> next = nullptr;        }        if(sec == nullptr){            while(fir != nullptr){                p -> next = fir;                p = p -> next;                fir = fir -> next;            }            p -> next = nullptr;        }        return result;    }        ListNode *MergeSort(ListNode *head, ListNode *tail){        if(head == tail){            ListNode *result = new ListNode(-1);            result -> next = head;            head -> next = nullptr;            return result;        }        ListNode *mid = head;        ListNode *fast = head;                while(fast != tail && fast -> next != tail){            mid = mid -> next;            fast = fast -> next -> next;        }        ListNode *tmp = mid -> next;        ListNode *result1 = MergeSort(head, mid);        ListNode *result2 = MergeSort(tmp, tail);        return Merge(result1, result2);    }        ListNode *sortList(ListNode *head){        if(head == nullptr || head -> next == nullptr)                return head;                    ListNode *tail = head;        while(tail -> next != nullptr)            tail = tail -> next;                    ListNode *result = MergeSort(head, tail);        return result -> next;    }

0 0
原创粉丝点击