• 【leetcode】Sort List


    Sort List
    Sort a linked list in O(n log n) time using constant space complexity.
     
     
    需要采用归并排序对链表进行操作。
     
    归并排序思想:每次选取链表中间元素,把链表分割成两部分,
    递归分割,直到链表中的元素是有序的时候(即只有一个元素时候),这时对链表进行合并,
    合并的时候,每次选两个链表中小的元素放在下一个位置。
     
     
     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11 
    12     ListNode *mergeList(ListNode *h1,ListNode *h2)
    13     {
    14        ListNode *head=new ListNode(0);
    15        ListNode *cur=head;
    16        while(h1!=NULL&&h2!=NULL)
    17        {
    18            if(h1->val>h2->val)
    19            {
    20                cur->next=h2;
    21                h2=h2->next;
    22            }
    23            else
    24            {
    25                cur->next=h1;
    26                h1=h1->next;
    27            }
    28            
    29            cur=cur->next;
    30        }
    31        
    32        cur->next=h1==NULL?h2:h1;
    33        
    34        cur=head;
    35        head=head->next;
    36        delete cur;
    37        
    38        return head;
    39     }
    40     
    41 
    42     
    43     ListNode *sortList(ListNode *head) {
    44         
    45         
    46         if(head==NULL||head->next==NULL) return head;
    47         
    48         ListNode *slow,*fast;
    49         slow=fast=head;
    50         while(fast->next!=NULL&&fast->next->next!=NULL)
    51         {
    52             fast=fast->next->next;
    53             slow=slow->next;
    54         }
    55         
    56         ListNode *mid=slow->next;
    57         slow->next=NULL;
    58         
    59         ListNode *h1=sortList(head);
    60         ListNode *h2=sortList(mid);
    61         return mergeList(h1,h2);
    62         
    63         
    64     }
    65 };
  • 相关阅读:
    p1373
    考试总结 2018-5-6
    p1044与p1898
    p1905
    p1904 p1903
    p1177
    p1273  日常打表
    p1142
    并查集与并查集模板
    p1265
  • 原文地址:https://www.cnblogs.com/reachteam/p/4183381.html
Copyright © 2020-2023  润新知