OJ lintcode 链表划分

作者: DayDayUpppppp | 来源:发表于2017-02-19 20:08 被阅读7次

    给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。
    你应该保留两部分内链表节点原有的相对顺序。

    您在真实的面试中是否遇到过这个题?
    Yes
    样例
    给定链表 1->4->3->2->5->2->null,并且 x=3
    返回 1->2->2->4->3->5->null

    /**
     * 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) {
            // write your code here
            ListNode * h1=new ListNode();
            ListNode * h2=new ListNode ();
            ListNode * h1_cur=h1;
            ListNode * h2_cur=h2;
            ListNode* p=head;
            if(p==NULL){
                return head;
            }
            while(p!=NULL){
                ListNode * temp=p;
                p=p->next;
                temp->next=NULL;
                if(temp->val< x){
                    h1_cur->next=temp;
                    h1_cur=h1_cur->next;
                }
                else{
                    h2_cur->next=temp;
                    h2_cur=h2_cur->next;
                }
            }
        
            if(h1->next==NULL){
                return h2->next;
            }
            if(h2->next==NULL){
                return h1->next;
            }
            h1_cur->next=h2->next;
            return h1->next;
        }
    };
    

    相关文章

      网友评论

        本文标题:OJ lintcode 链表划分

        本文链接:https://www.haomeiwen.com/subject/nlwjwttx.html