MARK一下参考
链表的的划分,按一定的值,左边大的右边小的,要稳定,时间on,空间o1.
#include<iostream>
using namespace std;
typedef struct ListNode{
int val;
ListNode* next;
ListNode(int v) :val(v), next(NULL){
}
};
class solution{
public:
void partion(ListNode* head, int k){
//头指针
ListNode* templist1 = new ListNode(0);
ListNode* templist2 = new ListNode(0);
//链表当前的最后一个元素
ListNode* left = templist1;
ListNode* right = templist2;
ListNode* p = head->next;
//都用的尾插法
while (p){
if (p->val >= k)
{
left->next = p;
left = p;
}
else{
right->next = p;
right = p;
}
//连接
left->next = templist2->next;
right->next = NULL;
//赋值给当前链表头部
head->next = templist1->next;
delete templist1;
delete templist2;
}
}
};