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划分链表。使得比x小的值排在前面。要求保持元素原先的相对位置。
思路:
维护两个链表,一个是比x小的节点的链表l1,还有一个是大于等于x的节点的链表l2
最后把l1的尾部接到l2的头部
复杂度:时间O(n)。空间O(1)
ListNode *partition(ListNode *head, int x) { ListNode less(-1), larger_equal(-1); ListNode *less_ptr = &less, *larger_equal_ptr = &larger_equal; for (ListNode *cur = head; cur != NULL; cur = cur->next) { if(cur->val < x){ less_ptr = less_ptr->next = cur; }else{ larger_equal_ptr = larger_equal_ptr->next = cur; } } less_ptr->next = larger_equal.next; larger_equal_ptr->next = NULL; return less.next; }