题目:
对于一个链表,我们需要用一个特定阈值完成对它的分化,使得小于等于这个值的结点移到前面,大于该值的结点在后面,同时保证两类结点内部的位置关系不变。
给定一个链表的头结点head,同时给定阈值val,请返回一个链表,使小于等于它的结点在前,大于等于它的在后,保证结点值不重复。
测试样例:
{1,4,2,5},3
{1,2,4,5}
class Divide {
public:
ListNode* listDivide(ListNode* head, int val) {
// write code here
ListNode *lhead=new ListNode(-1); //按原链表顺序遍历 并将小于等于val值 存在lhead为结点的新链表
ListNode *rhead=new ListNode(-1); // 将大于val值 存在rhead为结点的新链表
auto p=head;
auto left=lhead;
auto right=rhead;
//以下是遍历&分类的过程
while(p!=NULL){
if(p->val<=val){
left->next=p;
left=p;
}
else{
right->next=p;
right=p;
}
p=p->next;
}
left->next=NULL; //新链表的尾部->NULL
right->next=NULL;
/*如果lhead链表没有值插入 我们就返回rhead
/ 如果有那么就返回lhead
*/
if(lhead->next==NULL){
rhead=rhead->next;
return rhead;
}
else{
lhead=lhead->next;
rhead=rhead->next;
left->next=rhead;
return lhead;
}
}
};