题目描述:
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.
Example
题目思路:
Given 1->4->3->2->5->2->null
and x = 3
,
return 1->2->2->4->3->5->null
.
这题就是two pointers的思路,一条link专门link smaller number,一条专门link larger or equal number,然后把两条list合起来,注意需要把第二条link的尾巴断开。
Mycode(AC = 13ms):
/**
* 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 *dummy_less = new ListNode(0),
*dummy_more = new ListNode(0);
ListNode *tmp_less = dummy_less, *tmp_more = dummy_more, *tmp = head;
while (tmp) {
if (tmp->val < x) {
tmp_less->next = tmp;
tmp_less = tmp_less->next;
}
else {
tmp_more->next = tmp;
tmp_more = tmp_more->next;
}
tmp = tmp->next;
}
// break the original link
tmp_more->next = NULL;
tmp_less->next = dummy_more->next;
return dummy_less->next;
}
};