LeetCode || Partition List

来源:互联网 发布:网络写字员兼职 编辑:程序博客网 时间:2024/06/16 13:57

Partition List

题目链接

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.

/** * 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* smaller = NULL;ListNode* pre = NULL;ListNode* curr = head;while (curr != NULL){if (curr->val < x) {//只有当前值小于x时,才需要移动。if (pre != smaller){ListNode* next = curr->next;//必须记住这个点,不然会陷入死循环if (smaller == NULL){//move curr to smallersmaller = curr;smaller->next = head;head = smaller;}else //smaller == NULL{ListNode* tmp = smaller->next;smaller->next = curr;curr->next = tmp;smaller = curr;}pre->next = next;curr = next;}else //pre == smaller{smaller = curr;pre = curr;curr = curr->next;}}else //curr->val >= x表示不需要移动{pre = curr;curr = curr->next;}}return head;}};


 

0 0