Partition List

思路:题目要求partition后仍然保持list中原始的数字大小关系,所以可以使用两个头指针分别记录<x和>=x的数字,组成两个list。然后直接相连即可,这里需要注意要进行list->next=nullptr操作。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* partition(ListNode* head, int x) {
        ListNode minDummy(-1);
        ListNode maxDummy(-1);
        
        ListNode *minPrev = &minDummy;
        ListNode *maxPrev = &maxDummy;
        
        ListNode *cur = head;
        while(cur)
        {
            if(cur->val < x)
            {
                minPrev->next = cur;
                minPrev = minPrev->next;
            }
            else
            {
                maxPrev->next = cur;
                maxPrev = maxPrev->next;
            }
            cur = cur->next;
        }
        minPrev->next = maxDummy.next;
        maxPrev->next = nullptr;
        return minDummy.next;
    }
};

 

posted @ 2017-03-13 20:27  chengcy  Views(109)  Comments(0)    收藏  举报