給定一個鏈表和一個特定值 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