解题思路:分成两个链表,一个放比比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; } };