[LintCode]96.链表划分

来源:互联网 发布:德国表现主义电影知乎 编辑:程序博客网 时间:2024/05/21 18:36

给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。

你应该保留两部分内链表节点原有的相对顺序。

样例

给定链表 1->4->3->2->5->2->null,并且 x=3

返回 1->2->2->4->3->5->null

思路:将所有小于等于给定值的节点取出组成一个新的链表a,将所有大于给定值的节点取出组成另一个新的链表b,只要将b链表直接接在a链表后即可

/** * Definition of ListNode * class ListNode { * public: *     int val; *     ListNode *next; *     ListNode(int val) { *         this->val = val; *         this->next = NULL; *     } * } */class Solution {public:    /*     * @param head: The first node of linked list     * @param x: An integer     * @return: A ListNode     */    ListNode * partition(ListNode * head, int x) {        ListNode* minList= new ListNode(0);        ListNode* maxList= new ListNode(0);        ListNode* min = minList, *max=maxList;        ListNode* current=head;        while(current){            if(current->val < x){                min->next = current;                min = min->next;            }            else{                max->next = current;                max = max->next;            }            current = current->next;        }        min->next= maxList->next;        max->next = NULL;        return minList->next;    }};


原创粉丝点击