解题思路:分成两个链表,一个放比比x小的数,另一个放比x大等于的数,最后将两个数组合到一起。一定要放哨兵位,带头节点的会比较简单。最后返回
class Partition
{
public:
ListNode* partition(ListNode* pHead, int x)
{
struct ListNode* list1head,*list1tail,*list2head,*list2tail;//定义两组链表
list1head=list1tail=( struct ListNode*)malloc(sizeof( struct ListNode));//开辟空间
list2head=list2tail=( struct ListNode*)malloc(sizeof( struct ListNode));
list1tail->next=list2tail->next=NULL;
struct ListNode* cur=pHead;
while(cur)
{
if(cur->val< x)//把比x小的数放在listhead链表里
{
list1tail->next=cur;
list1tail=list1tail->next;
}
else//把比x大的数放在listhead链表里
{
list2tail->next=cur;
list2tail=list2tail->next;
}
cur=cur->next;
}
list2tail->next=NULL;
list1tail->next=list2head->next;//组合两个链表
return list1head->next;
}
};