题意为将小于特定值x的所有节点均放在不小于x的节点的前面,而且,不能改变原来节点的前后位置。
思路:设置两个链表,一个用于存放值小于x的节点,一个用于存放值不小于x的节点。
class Solution { public: ListNode *partition(ListNode *head, int x) { if(head==nullptr) return head; ListNode less(-1); ListNode *pless=&less; ListNode noless(-1); ListNode *pnoless=&noless; ListNode *p=head; while(p!=nullptr) { if(p->val<x) { /*ListNode temp(p->val);不可行,局部变量,会随着函数调用的结束而释放内存,导致在主函数中找不到原有内存空间*/ /*pless->next=new ListNode(p->val);结果正确,但是用了额外的内存,而且很可能会产生内存泄露*/ pless->next=p;//可行 pless=pless->next; } else { //ListNode temp(p->val); //pnoless->next=new ListNode(p->val); pnoless->next=p; pnoless=pnoless->next; } p=p->next; } pnoless->next=nullptr; pless->next=noless.next; return less.next; } };
时间: 2024-11-09 09:20:29