题目描述
编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前
给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。
分析:分割之后,都是小于x的值的相对位置应该不表,同理大于x的值的位置也一样不变。
创建两个链表,一个存放小于x的数,一个存放大于等于x的数。
ListNode* smallList=new ListNode(-1);
ListNode* bigList=new ListNode(-1);
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};*/
class Partition {
public:
ListNode* partition(ListNode* pHead, int x) {
// write code here
ListNode* smallList=new ListNode(-1);
ListNode* bigList=new ListNode(-1);
ListNode* small=smallList;
ListNode* big=bigList;
ListNode* curr=pHead;
while(curr)//遍历链表找到比x小的数,比x大的数
{
if(curr->val<x)
{
small->next=curr;
small=curr;//存放比x小的数的链表增长
}
else
{
big->next=curr;
big=curr;//存放比x大的数链表增长
}
curr=curr->next;
}
big->next=NULL;
small->next=bigList->next;
return smallList->next;
}
};