简单,但是链表问题容易犯错
第一次错误:每次遍历到小于x的节点移动到前面后都需要将a向后移动到移动后的该节点处,使得后面移动的节点都能移动到该节点后
第二次错误:看错了题目,需要从头开始遍历
第三次错误:没有注意到空节点问题,这是链表常见错误,需要加一个if再节点等于节点->next
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* partition(ListNode* head, int x) {
ListNode *h=new ListNode(0,head);
ListNode *a=h;
while(a->next&&a->next->val<x){
a=a->next;
}
ListNode *b=a;
while(b->val!=x){
if(b->next) b=b->next;
else break;
}
ListNode *c=a;
while(c->next){
if(c->next->val<x){
ListNode *aa=a->next;
ListNode *cc=c->next->next;
a->next=c->next;
a->next->next=aa;
c->next=cc;
a=a->next;
}
else c=c->next;
}
return h->next;
}
};