🎉 One-stop destination for all your technical interview Preparation 🎉
Given the head of 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.
Note: We are not supposed to arrange linked list such that all nodes less than x are on one side and all nodes greater than or equal to x are on the other side.We have to maintain original order of the nodes.
less->next
which is pointing to the head of the resultant linked list.class Solution {
public:
ListNode* partition(ListNode* head, int x)
{
ListNode* less = new ListNode(0); // ll containing all less than x valued nodes
ListNode* more = new ListNode(0); // ll containing all more than or equal to x valued nodes in original order
ListNode* lessHead = less; // head of less ll
ListNode* moreHead = more; // head of more ll
while (head) {
if (head->val < x) {
// add to less ll
lessHead->next = head;
lessHead = lessHead->next;
} else {
// add to more ll
moreHead->next = head;
moreHead = moreHead->next;
}
head = head->next;
}
// join less and more linked lists
lessHead->next = more->next;
// set head of more ll to null. i.e.last node of more ll is null now.
moreHead->next = nullptr;
return less->next;
}
};