1.将链表中的每个值进行遍历;如果小于x则将器叠加到左侧,反之叠加在右侧;
2.使用L指针维护左侧队尾,队尾的下一个节点为首个大于x的节点
3.使用rh表示右侧首个节点指针,rt表示右侧对尾的最后一个指针,时刻维护。
/**
- struct ListNode {
- int val;
- struct ListNode *next;
- };
- /
class Solution {
public:
/*
*
* @param head ListNode类
* @param x int整型
* @return ListNode类
*/
ListNode partition(ListNode* head, int x) {
// write code here
//定义一个虚头;定义一个指针维护大于x的头
/*
1.将链表中的每个值进行遍历;如果小于x则将器叠加到左侧,反之叠加在右侧;
2.使用L指针维护左侧队尾,队尾的下一个节点为首个大于x的节点
3.使用rh表示右侧首个节点指针,rt表示右侧对尾的最后一个指针,时刻维护。
*/ ListNode*H=new ListNode(0); ListNode* L=NULL,*rh=NULL,*rt=NULL; ListNode* h=H; while(head) { if(head->val<x) { //头节点下一个目标位小于x的节点值 H->next=new ListNode(head->val); //更新H已经头节点,节点尾的下一个节点位第一个大于x的节点 L=H->next; L->next=rh; H=L; } else { //表示首个右侧节点值 if(!rh) { rh=new ListNode(head->val); //将大于的首个数字放在左尾 if(L)//之前出现过小于x的值 L->next=rh; rt=rh; } else { //其他直接将其放置在rt之后进行叠加 rt->next=new ListNode(head->val); rt=rt->next; } } head=head->next; } //若L为空表示只存在大于x的节点 if(L==NULL) return rh; return h->next; }
};