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.
思路:给定一个单链表和一个数值,根据数值将链表分段,节点值大于该数值的节点,在链表前面,小于的在链表后面,节点的相对顺序保持不变
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* partition(ListNode* head, int x) {
ListNode node1(0), node2(0);
ListNode *p1 = &node1, *p2 = &node2;
while (head) {
if (head->val < x)
p1 = p1->next = head;//小于数值的节点
else p2 = p2->next = head;//大于数值的节点
head = head->next;
}
p2->next = nullptr;//链表尾指向空
p1->next = node2.next;//链表拼接
return node1.next;
}
};