Given a linked list and a valueX, Partition it such that all nodes lessXCome before nodes greater than or equalX.
You shoshould preserve the original relative order of the nodes in each of the two partitions.
For example,
Given1->4->3->2->5->2AndX= 3,
Return1->2->2->4->3->5.
Idea: create two header nodes, link the nodes smaller than X to the first node, and link the nodes larger than or equal to X to the second node.
Time complexity O (N), space complexity O (1)
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution {10 public:11 ListNode *partition(ListNode *head, int x) {12 if(head == NULL) return head;13 14 ListNode *plow = new ListNode(-1);15 ListNode *plhead = plow;16 ListNode *phigh = new ListNode(-1);17 ListNode *phhead = phigh;18 ListNode *pt = head;19 20 while (pt != NULL) {21 if (pt->val < x) {22 plow->next = pt;23 plow = pt;24 } else {25 phigh->next = pt;26 phigh = pt;27 }28 pt = pt->next;29 }30 31 plow->next = phhead->next;32 phigh->next = NULL;33 34 return plhead->next;35 }36 };
[Leetcode] partition list