zoukankan      html  css  js  c++  java
  • [LeetCode]Sort List

    题目描述:

    Sort a linked list in O(n log n) time using constant space complexity.

    解题方案:

    题目要求的时间复杂度是 O(n log n),常数级空间复杂度。所以这里用了归并排序,归并排序在数组上操作比较方便,但是这里要排序的是链表。我们用到两个指针将链表一份为二,一个指针q每次前进两步,一个指针p每次前进一步,当q到达链表结尾时,p到达链表中间位置。下面是该题的代码:

     1 class Solution {
     2 public:
     3     ListNode *sortList(ListNode *head) {
     4         return mergeSort(head);
     5     }
     6     ListNode *mergeSort(ListNode *head) {
     7         if (!head || head->next == NULL) {
     8             return head;
     9         }
    10         ListNode *p = head;
    11         ListNode *q = head;
    12         ListNode *pre = NULL;
    13         while (q && q->next != NULL) {
    14             q = q->next->next;
    15             pre = p;
    16             p = p->next;
    17         }
    18         pre->next = NULL;
    19         ListNode *llist = mergeSort(head);
    20         ListNode *rlist = mergeSort(p);
    21         return merge(llist, rlist);
    22     }
    23     ListNode *merge(ListNode *lhs, ListNode *rhs) {
    24         ListNode *newhead = new ListNode(0);
    25         ListNode *p = newhead;
    26         while (lhs && rhs) {
    27             if (lhs->val <= rhs->val) {
    28                 p->next = lhs;
    29                 lhs = lhs->next;
    30             } else {
    31                 p->next = rhs;
    32                 rhs = rhs->next;
    33             }
    34             p = p->next;
    35         }
    36         if (lhs == NULL) {
    37             p->next = rhs;
    38         } else {
    39             p->next = lhs;
    40         }
    41         p = newhead->next ;
    42         newhead->next = NULL;
    43         delete newhead;
    44         return p;
    45     }
    46 };
  • 相关阅读:
    configparser模块
    xml文件解析
    shutil模块 + shelve模块 二合一版
    hashlib模块
    subprocess模块和sys模块
    re模块
    os模块
    random模块
    time模块、datetime模块讲解
    洛谷P3414 SAC#1
  • 原文地址:https://www.cnblogs.com/skycore/p/3996546.html
Copyright © 2011-2022 走看看