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; } } };
#includeusing 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 >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 val; outlist = outlist->next; } }