LintCode解题思路LintCode解题思路

OJ lintcode 链表划分

2017-02-19  本文已影响7人  DayDayUpppppp

给定一个单链表和数值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;
    }
};
上一篇下一篇

猜你喜欢

热点阅读