zoukankan      html  css  js  c++  java
  • [Leetcode 71] 86 Partition List

    Problem:

    Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.

    You should preserve the original relative order of the nodes in each of the two partitions.

    For example,
    Given 1->4->3->2->5->2 and x = 3,
    return 1->2->2->4->3->5.

    Analysis:

    first parition the list into two sub-lists. sublist1 for those nodes that less than x, sublist 2 for those nodes that greater than or equal to x. Then merge them together. Remember to set the last node's next to NULL.

    The split procedure takes O(n) time and the merger procedure takes O(1) time.

    It's an in-place algorithm.

    Code:

     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     ListNode *partition(ListNode *head, int x) {
    12         // Start typing your C/C++ solution below
    13         // DO NOT write int main() function
    14         if (head == NULL || head->next == NULL)
    15             return head;
    16         
    17         ListNode *ls, *le, *gs, *ge;
    18         ls = le = gs = ge = NULL;
    19         
    20         // split list
    21         while (head != NULL) {
    22             if (head->val < x) {
    23                 if (ls == NULL) {
    24                     ls = le = head;
    25                 } else  {
    26                     le->next = head;
    27                     le = head;
    28                 }
    29             } else {
    30                 if (gs == NULL) {
    31                     gs = ge = head;
    32                 } else {
    33                     ge->next = head;
    34                     ge = head;
    35                 }
    36             }
    37             
    38             head = head->next;
    39         }
    40         
    41         // merge list
    42         if (ls == NULL) {
    43             ls = gs;
    44             if (ge != NULL)
    45                 ge->next = NULL;
    46         } else {
    47             le->next = gs;
    48             if (ge != NULL)
    49                 ge->next = NULL;
    50         }
    51         
    52         return ls;
    53     }
    54 };
    View Code
  • 相关阅读:
    js基础练习题(2)
    js基础练习题(1)
    DOM-BOM-EVENT(7)
    DOM-BOM-EVENT(6)
    DOM-BOM-EVENT(5)
    DOM-BOM-EVENT(4)
    DOM-BOM-EVENT(3)
    Spark学习笔记--Spark在Windows下的环境搭建(转)
    idea下关联spark源码环境(转)
    Spark 性能相关参数配置详解-任务调度篇
  • 原文地址:https://www.cnblogs.com/freeneng/p/3203621.html
Copyright © 2011-2022 走看看