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
.
分成两段,按照x,最后连接起来。 看了别人的答案,突然发现safeguard写成object instance更方便一些。
struct ListNode {
int val;
ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
class Solution {
public:
ListNode *partition(ListNode *head, int x) {
ListNode head1(0),head2(0);
ListNode *node1=&head1, *node2=&head2;
while(head){
if (head->val<x)
node1=node1->next=head;
else
node2=node2->next=head;
head=head->next;
}
node2->next=NULL;
node1->next=head2.next;
return head1.next;
}
};