题目描述
给出一个链表和一个值x,以x为参照将链表划分成两部分,使所有小于x的节点都位于大于或等于x的节点之前。
两个部分之内的节点之间要保持的原始相对顺序。
例如:
给出 1→4→3→2→5→2 和 x=3,
返回 1→2→2→4→3→5.
示例1
输入
{1,4,3,2,5,2},3
返回值
{1,2,2,4,3,5}
【解析】
在原链表内进行调整,使用双指针,一个指向小于x的最后一个节点,另一个指向大于x的最后一个节点。
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类
* @param x int整型
* @return ListNode类
*/
ListNode* partition(ListNode* head, int x) {
// write code here
if(head==NULL) return head;
ListNode *pHead = new ListNode(0);
pHead->next=head;
ListNode *p1=pHead, *p2=pHead;
while(p2->next){
if(p2->next->val <x){
if(p2->next == p1->next){