给定一个链表和一个特定值 x,对链表进行分隔,使得全部小于 x 的节点都在大于或等于 x 的节点以前。web
你应当保留两个分区中每一个节点的初始相对位置。less
示例:svg
输入: head = 1->4->3->2->5->2, x = 3
输出: 1->2->2->4->3->5spa
申请新空间作头结点方式
class Solution { public: ListNode* partition(ListNode* head, int x) { ListNode*less_pre=new ListNode(8); ListNode*more_pre=new ListNode(8); ListNode *l=less_pre; ListNode*m=more_pre; while(head) { if(head->val<x) { less_pre->next=head; less_pre=head; } else { more_pre->next=head; more_pre=head; } head=head->next; } less_pre->next=m->next; more_pre->next=NULL; return l->next; } };
直接利用地址存储方式
class Solution { public: ListNode* partition(ListNode* head, int x) { ListNode less_head(0); ListNode more_head(0); ListNode*less_pre=&less_head; ListNode*more_pre=&more_head; while(head) { if(head->val<x) { less_pre->next=head; less_pre=head; } else { more_pre->next=head; more_pre=head; } head=head->next; } less_pre->next=more_head.next; more_pre->next=NULL; return less_head.next; } };
本文分享 CSDN - 希境。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。.net