
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.
class Solution {
public:
ListNode *partition(ListNode *head, int x) {
ListNode *first=NULL , *second=NULL , *head1=NULL , *head2=NULL;
while(head)
{
if(head->val < x)
{
if(first == NULL)
head1 = head;
else
first->next = head;
first = head;
//head = head->next;
}
else
{
if(second == NULL)
head2 = head;
else
second->next =head;
second = head;
//head = head->next;
}
head = head->next;
}
if (second != NULL) {
second->next = NULL;
}
if (first != NULL) {
first->next = head2;
return head1;
}
else {
return head2;
}
}
};#include<iostream>
using namespace std;
#define N 6
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode *partition(ListNode *head, int x) {
ListNode *first=NULL , *second=NULL , *head1=NULL , *head2=NULL;
while(head)
{
if(head->val < x)
{
if(first == NULL)
head1 = head;
else
first->next = head;
first = head;
}
else
{
if(second == NULL)
head2 = head;
else
second->next =head;
second = head;
}
head = head->next;
}
if (second != NULL) {
second->next = NULL;
}
if (first != NULL) {
first->next = head2;
return head1;
}
else {
return head2;
}
}
};
ListNode *creatlist()
{
ListNode *head=NULL;
ListNode *p;
for(int i=0; i<N; i++)
{
int a;
cin>>a;
p = (ListNode*) malloc(sizeof(ListNode));
p->val=a;
p->next = head;
head = p;
}
return head;
}
int main()
{
ListNode *list = creatlist();
Solution lin;
ListNode *outlist = lin.partition( list,3 );
for(int i=0; i<N; i++)
{
cout<<outlist->val;
outlist = outlist->next;
}
}原文地址:http://blog.csdn.net/keyyuanxin/article/details/43817501